тізім көрінісінде ұзақ уақыттай басу оқиғасынан кейін мәзір жасаңыз

Барлық деректерді көрсететін дерекқорға қосылған тізім көрінісі бар. Пайдаланушы тізімді (дерекқорды енгізу) элементті ұзақ уақыт басқанда, жазбаны өңдеу немесе жою параметрлерін көрсететін болса, мәзірдің көрсетілуін қалаймын. мұны қалай жасай аламын?

Әлі күнге дейін мен онімLongClick тыңдаушысын пайдаланып көрдім және оны ұзақ уақыт басылған көріністің идентификаторын көрсете бастадым.

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
        int position, long id) {

    String res = Long.toString(id);
     Toast toast = Toast.makeText(this, res, Toast.LENGTH_SHORT);
     toast.show();

    return true;
}
58

6 жауаптар

Алдымен контекстік мәзірді тізім көрінісінде тіркеу керек.

lv = (ListView) findViewById(R.id.list_view);
registerForContextMenu(lv);

Содан кейін, белсенділік әдістерін ғана жасаңыз.

/**
 * MENU
 */

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
      if (v.getId()==R.id.list_view) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.menu_list, menu);
      }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
      switch(item.getItemId()) {
         case R.id.add:
        //add stuff here
            return true;
          case R.id.edit:
           //edit stuff here
                return true;
          case R.id.delete:
       //remove stuff here
                return true;
          default:
                return super.onContextItemSelected(item);
      }
}

Мұнда menu_list.xml файлының мысалы (файлды res/menu қалтасына қою керек).

<?xml version="1.0" encoding="utf-8"?>
 

Бұл көмектеседі деген үміттемін.

103
қосылды
Hey, мәзір үшін белгішелер орнаттыңыз, бірақ мәзірде белгішелер жоқ. Неліктен? Иконалар қалай көрсетуге болады?
қосылды автор Sharikov Vladislav, көзі
Рахмет, ол жұмыс істейді, бірақ тізімдегі қай зат ұзақ уақытқа созылғанын қалай білемін? Кез келген идентификатор?
қосылды автор Enriqe, көзі
Жарайды, мен оны таптым. > ((AdapterView.AdapterContextMenuInfo) menuInfo) .id ((AdapterView.AdapterContextMenuInfo) menuInfo) .position
қосылды автор Enriqe, көзі
қосқыш операторы R.id.add сияқты мәндер бұдан былай тұрақты емес ретінде жасалмайды. Сонда мен ауыстырып-қосқышты if-else stmt керек болды!
қосылды автор mvsagar, көзі
Үлкен мысал, бірақ мәтінмәндік мәзірлерде белгішелер қолдамайды
қосылды автор dave, көзі
Мен өзімнің диалогтарымда тырысып көрдім, мәтінмәндік мәзірлер көрсетілді, бірақ onContextItemSelected мәзір элементін басқаннан кейін шақырылмайды. Неліктен? Мен Android 6.0 пайдаланамын
қосылды автор Taufik Nur Rahmanda, көзі

onItemLongClick пайдалану орнына пайдалануға болады

public void onCreateContextMenu(final ContextMenu menu, 
                    final View v, final ContextMenuInfo menuInfo) {
 ...
}

мұнда өңдеуге және жоюға арналған параметрлерді орнатасыз.

Контекстік мәзірден таңдалған элементтің әрекеттерін өңдеуге болады

public boolean onContextItemSelected(final MenuItem item)

Мәтінмәндік мәзір бойынша қосымша ақпарат алу үшін мұнда қараңыз.

Қадамдық нұсқаулықты оқу үшін мұнда .

46
қосылды
Мен oncreateContextMenu-мен пайдаланып көрдім, ол әлі күнге дейін жұмыс істейді .. Рақмет
қосылды автор Eriz, көзі

Басқа көзқарас:

//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;
          }
        });
5
қосылды

Сіз басу элементінің әдісінде Activity.openOptionsMenu() деп атауға болады

check here
http://developer.android.com/reference/android/app/Activity.html#openOptionsMenu%28%29

2
қосылды
Егер сіз опциялар мәзірін пайдалана алсаңыз - бұл жақсы шешім (1 жол!) Және контекст үшін қажетті барлық параметрлерді орындау үшін балама
қосылды автор gnB, көзі

**

тізім көрінісінде мәтінмәндік мәзірді тіркегеннен кейін

** onCreateContextMenu әдісін алдын ала орнатыңыз

@Override
    public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo){
        if (v.getId() == R.id.listView){
            AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)menuInfo;
            MenuItem mnu1=menu.add(0,0,0,"Delete");
            MenuItem mnu2=menu.add(0,1,1,"Share");
        }
    }

содан кейін таңдауға болатын әрбір элемент үшін кодтау

 @Override
    public boolean onContextItemSelected(MenuItem menuItem){
        AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo)menuItem.getMenuInfo();
        switch (menuItem.getItemId()) {
            case 0:
                Toast.makeText(this, "Delete Selected", Toast.LENGTH_LONG).show();
                break;
            case 1:
                Toast.makeText(this, "Share Selected", Toast.LENGTH_LONG).show();
                break;

            default:
                break;

        }
        return true;
    }
0
қосылды

RegisterForContextMenu() қолданыңыз; Мәтінмәндік мәзірді кез-келген Viewer мұрағатына байланыстыру.

Таңдалған ListItem деректеріне қол жеткізу үшін, AdapterView.AdapterContextMenuInfo-ді қарапайым пайдаланыңыз. Мәселен, мысалы:

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo menuinfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
    long selectid = menuinfo.id; //_id from database in this case
    int selectpos = menuinfo.position; //position in the adapter
    switch (item.getItemId()) {
    case 1:
        doSomething(selectid);
    break;
    case 2:
        doSomethingElse(selectpos);
    }
    return super.onContextItemSelected(item);
}
0
қосылды