как отключить контекстное меню для определенных элементов ListView в Android

Я знаю, что этот вопрос был задан ранее, и ответ должен был переопределить onPrepareContextMenu()/onCreateContextMenu(). Но я не понял и не получил никакого решения для этого. Пожалуйста, помогите мне отключить контекстное меню для определенных элементов ListView.

2 ответов


Открытие контекстного меню зависит от вашей логики. Например, в методе onItemClick (в вашем listView) вы должны проверить содержимое своего элемента и показать или не показывать контекстное меню. Я не понимаю, почему это для тебя проблема?

обновление

public class ExampleActivity extends ListActivity {

    private ListView mListView;
    private ArrayList<String> mList = new ArrayList<String>();
    private ArrayAdapter<String> mArrayAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mArrayAdapter = new ArrayAdapter<String>(this, android.R.id.list ,mList);
        mListView = (ListView) findViewById(android.R.id.list);
        setListAdapter(mArrayAdapter);
        registerForContextMenu(mListView);

        mListView.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView , View v,int position, long id) {
                mListView.getItemAtPosition(position); //check current item with your logic and show or don't show contextMenu
                // for example I will show
                mListView.showContextMenu(); //to show
                return true;
            }
        });
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        // add contextmenu items
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // todo some logic...
        return super.onContextItemSelected(item);
    }

}

может быть это поможет вам... удача...


также вы можете повторно зарегистрировать свой listview, который вызовет ваш onCreateContextMenu метод повторного выполнения

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

и затем вы можете скрыть или отобразить пункты меню, с которыми когда-либо логику в onCreateContextMenu метод