如何处理ListView项目的长按?

时间:2011-06-01 18:15:27

标签: android android-listview

我怎样才能抓住这样的事件? onCreateContextMenu非常相似,但我不需要菜单。

4 个答案:

答案 0 :(得分:26)

很难知道你需要实现什么。但我的猜测是你要对接收长按的项目执行一些操作。为此,您有两种选择:

listView.setOnItemLongClickListener (new OnItemLongClickListener() {
  public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
    //do your stuff here
  }
});

答案 1 :(得分:14)

通常情况下,您可以将列表视图上的长按与上下文菜单相关联,您可以通过向Activity.registerForContextMenu(View view)注册listView来提供与其他Android应用程序更一致的用户界面体验。

然后覆盖应用中的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建议的是什么。

答案 2 :(得分:0)

向您的视图添加自定义View.OnLongClickListener。它可以被许多实例共享,然后您可以使用

的参数
onLongClick(View v)

知道点击了哪个视图并做出相应的反应。

此致  斯特凡

答案 3 :(得分:0)

//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;
          }
        });