我正在尝试在我的应用中启用Long Clicks,但我无法进行编译。我在这里查看了之前问题中的示例,但我无法编译它们中的任何一个。我的主要活动被宣布为:
import android.widget.AdapterView.OnItemLongClickListener;
public class LinearLayoutDemo extends ListActivity implements OnClickListener, OnItemClickListener, OnItemLongClickListener {
在onCreate()方法中,我把它放在:
getListView().setOnItemLongClickListener(this);
对于我的ListView(myLV),我这样做了:
myLV1.setOnItemLongClickListener(new View.OnItemClickListener() {
@Override public boolean onLongClick(View v) {
Log.d(TAG, "setOnItemLongClickListener() called for myLV");
return(true);
}
});
我认为以上一定是错的,但我不知道为什么。编译器错误是
LinearLayoutDemo.java:45: com.commonsware.android.linearpct.LinearLayoutDemo is not abstract and does not override abstract method onItemLongClick(android.widget.AdapterView<?>,android.view.View,int,long) in android.widget.AdapterView.OnItemLongClickListener
[javac] public class LinearLayoutDemo extends ListActivity implements OnClickListener, OnItemClickListener, OnItemLongClickListener {
LinearLayoutDemo.java:287: cannot find symbol
[javac] symbol : class OnItemLongClickListener
[javac] location: class android.view.View
[javac] myLV1.setOnItemLongClickListener(new View.OnItemLongClickListener() {
[javac] ^
的 的 ** * ** * ** * 的** * *** 更新 ** * ** * ** * ** * ***
我在ListActivity类定义中删除了OnItemLongClickListener。我也摆脱了这个
getListView().setOnItemLongClickListener(this);
然后我添加了这段代码并且它有效(我不知道为什么):
myLV1.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
Log.d(TAG, "onItemLongClick() for LV1");
return true;
}
});
看起来很简单,所以我坚持下去,除非有人能告诉我我不应该这样做。
的 的 ** * ** * ** * 的** * 编辑 * ** * ** * ** * ****
好的,我有Long Clicks工作。如何判断我长按哪个项目?我假设myLV1.getCheckedItemPosition()可以工作,但它没有。
没关系,它位于onItemLongClick()的'position'参数中。
答案 0 :(得分:2)
您在这里做的是实际设置onLongClickListener两次:
1。 getListView().setOnItemLongClickListener(this);
这里你将Activity
设置为Listener,因为它实现了onLongClickListener
接口。
2。 myLV1.setOnItemLongClickListener(new View.OnItemClickListener() {....
在这里,您要创建一个新的onItemClickListener
并尝试将其再次应用到列表中。
从您的活动代码中删除此部分。
并添加未实现的方法:
一旦您尝试实施onLongClick
,该{p> Activity
就应该在您的onLongClickListener
中
在此方法中,您可以指定长按一下的操作。
<强>更新强>
这会将此代码添加到类中:
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
return false;
}
在其中定义您的长按活动。
答案 1 :(得分:1)
你基本上可以做两件事:
删除行getListView().setOnItemLongClickListener(this);
,因为您没有实现/覆盖AdapterView.OnItemLongClickListener的onItemLongClick方法
在myLV1.setOnItemLongClickListener中,您必须创建AdapterView.OnItemLongClickListener的实例,而不是View.OnItemLongClickListener
答案 2 :(得分:0)
是否要在长按ListView-Item时创建上下文菜单?
如果是这样,最简单的方法是在registerForContextMenu(findViewById(android.R.id.list));
- 方法中使用onCreate
。
然后你必须覆盖方法onCreateContextMenu
和onContextItemSelected
,如下所示:
<强> onCreateContextMenu 强>
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_context_layout, menu);
}
<强> onContextItemSelected 强>
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.my_item1:
doSomething();
return true;
case R.id.my_item2:
doSomething();
return true;
default:
return super.onContextItemSelected(item);
}
}