Пользовательский ListView и контекстное меню. Как его получить?

В моем приложении есть два файла макета. Также у меня Activity extends ListActivity. Каждый элемент этого упражнения выглядит с учетом файла макета item.xml. Я пытаюсь открыть контекстное меню при длительном нажатии на элемент, но не вижу его.

В своей деятельности я пытаюсь зарегистрироватьForContextMenu (getListView ()) и переопределить два метода

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle bundle = this.getIntent().getExtras();
        registerForContextMenu(getListView());
        new PopulateAdapterTask().execute(ACTION_SELECT);   
     }

    @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.context_menu, menu);
        }


        @Override
        public boolean onContextItemSelected(MenuItem item) {
            AdapterView.AdapterContextMenuInfo info;
            try {
                info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
            } catch (ClassCastException e) {
                return false;
            }
            long id = getListAdapter().getItemId(info.position);
            Log.d(TAG, "id = " + id);
            return true;
        }

Main.xml

    

    
        
        
            

        

    


Item.xml


     
    
    


    
        
    


Все это не работает. Может причина в LinearLayout? Я также нашел похожую тему Android: Контекстное меню не отображается для ListView с элементами, определенными LinearLayout? , но у меня есть более сложный элемент списка.

Как получить контекстное меню в моем случае?

Также у меня есть внутренний класс extends ArrayAdapter. В этом классе в методе getView я могу установить OnCreateContextMenuListener для каждого просмотра после появления этого контекстного меню, но я не знаю, как обрабатывать щелчки элементов. Если я пытаюсь сделать это в методе onContextItemSelected, объект item.getMenuInfo () всегда имеет значение null, и я не могу получить от него некоторую информацию.

private class ChannelAdapter extends ArrayAdapter {

        private List channels;

        public ChannelAdapter(Context context, int textViewResourceId, List objects) {
            super(context, textViewResourceId, objects);
            this.channels = objects;
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.station_item, null);
            }


                v.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
                    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                        MenuInflater inflater = getMenuInflater();
                        inflater.inflate(R.menu.context_menu, menu);
                    }
                });

Спасибо. Надеюсь на вашу помощь.

16
задан Community 23 May 2017 в 12:09
поделиться