Как справиться с долгим нажатием на элемент ListView? - PullRequest
9 голосов
/ 01 июня 2011

Как я могу поймать такое событие? onCreateContextMenu довольно похоже, но мне не нужно меню.

Ответы [ 4 ]

26 голосов
/ 01 июня 2011

Трудно понять, чего вам нужно достичь.Но я предполагаю, что вы хотите выполнить некоторые действия над элементом, который получает длинный щелчок.Для этого у вас есть два варианта:

.

listView.setOnItemLongClickListener (new OnItemLongClickListener() {
  public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
    //do your stuff here
  }
});
14 голосов
/ 01 июня 2011

Как правило, вы связываете длинный щелчок по представлению списка с контекстным меню, что можно сделать, зарегистрировав listView с помощью Activity.registerForContextMenu(View view), чтобы обеспечить более согласованный пользовательский интерфейс с другими приложениями для 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

Если вы просто хотите захватить длинныйЯ думаю, что то, что предлагает Сниколас, сработает.

0 голосов
/ 12 декабря 2013
//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;
          }
        });
0 голосов
/ 01 июня 2011

Добавьте пользовательский View.OnLongClickListener к вашим представлениям. Он может использоваться многими экземплярами, тогда вы можете использовать параметр

onLongClick(View v)

чтобы узнать, на какой вид щелкнули, и отреагировать соответственно.

С уважением, Stéphane

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...