我该如何捕获这种事件?
onCreateContextMenu
非常类似,但我不需要菜单。很难知道你想要实现什么。但是我猜测你想对接收长按操作的项目执行某些动作。为此,你有两个选项:
.
listView.setOnItemLongClickListener (new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
//do your stuff here
}
});
通常情况下,长按列表项会关联到上下文菜单。您可以通过使用Activity.registerForContextMenu(View view)
为列表视图注册一个上下文菜单,以使用户界面体验与其他安卓应用程序更加一致。
然后在您的应用程序中重写onContextItemSelected方法,如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
listView = (ListView) findViewById(R.id.your_list_view);
registerForContextMenu(listView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle(getString(R.string.menu_context_title));
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.your_context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.some_item:
// do something useful
return true;
default:
return super.onContextItemSelected(item);
}
列表中的位置也保存在 info.id
中。
如果你只想捕获长按事件,那么我认为 Snicolas 提出的方法可以起作用。
registerForContextMenu(listView)
吗?正如其他人所说,你是想在项目长按时实现某些功能,还是想为列表视图上的项目获取上下文菜单? - Mark FisherRegisterForContextMenu(listView)
已经存在。 - LA_onCreateContextMenu()
代码以保证代码完整性,但是由于您不想使用上下文菜单,这可能不是您想要的方式。尽管如此,我仍然强烈建议您在列表项长按时使用它们,也许显示“开始...”,因为这将允许用户在意外按住按钮太长时间后点击返回按钮。如果您需要长按,则可以选择其他建议中的一种方法来为视图添加新侦听器。 - Mark FisheronLongClick(View v)
了解哪个视图被点击并相应地做出反应。
敬礼, 斯蒂芬
public class BridgesCloseActivity extends ListActivity { ... OnLongClickListener longClickListener; ... longClickListener = new OnLongClickListener() { public boolean onLongClick(View v) { Log.i("", Integer.toString(v.getId())); return true; } };
- LA_//Deleted individual cart items
//on list view cell long press
cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() {
@SuppressWarnings("rawtypes")
public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) {
final CharSequence[] items = { "Delete" };
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Action:");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
cart = cartList.get(position);
db.removeProductFromCart(context, cart);
new AlertDialog.Builder(context)
.setTitle(getString(R.string.success))
.setMessage(getString(R.string.item_removed))
.setPositiveButton("Done", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class);
startActivity(intent);
}
})
.show();
}
});
AlertDialog alert = builder.create();
alert.show();
//do your stuff here
return false;
}
});
this.getListAdapter().getItem(position)
吗? - LA_T obj = (T) parent.getItemAtPosition(position);
- Aleadam