Контекстная панель действий не работает для ListActivity и BaseAdapter

У меня есть класс, расширяющий ListActivity, и еще один, расширяющий BaseAdapter. Когда я запускаю класс ListActivity, я заполняю список объектов и передаю его адаптеру.

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

Чего не хватает для отображения контекстного меню и выбора итенов из ListView?

public class ChatActivity extends ListActivity {

    @Override
    protected void onCreate(Bundle bundle) {
        ListView listView = getListView();
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

            @Override
            public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public boolean onCreateActionMode(ActionMode arg0, Menu menu) {
                MenuInflater inflater = getMenuInflater();
                inflater.inflate(R.menu.delete, menu);
                return true;
            }

            @Override
            public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void onItemCheckedStateChanged(ActionMode arg0, int arg1, long arg2,
                    boolean arg3) {
                // TODO Auto-generated method stub

            }
        });
    }
}


public class ChatAdapter extends BaseAdapter {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View convertView = LayoutInflater.from(mContext).inflate(
                R.layout.chat_row, parent, false);

        /*convertView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ColorDrawable drawable = ((ColorDrawable)v.getBackground());
                if(drawable == null || drawable.getColor() == Color.GRAY){
                    v.setBackgroundColor(Color.WHITE);
                } else {
                    v.setBackgroundColor(Color.GRAY);
                }
                //etc
            }
        });*/
        return convertView;     
    }
}

person Community    schedule 03.08.2014    source источник


Ответы (1)


зарегистрируйте contextMenu после setAdapter в списке listview таким образом.

registerForContextMenu(getListView());

или если вышеуказанный метод не работает, вы можете создать contextmenuListner для своего представления пользовательского макета.. вот так

v.setOnCreateContextMenuListener(this);

более подробное описание в другом ответе SO https://stackoverflow.com/a/4001019/942224

ИЛИ

вы можете использовать PopUpWindow. здесь вы можете отобразить свой пользовательский вид в виде всплывающего окна относительно положения вашего представления.. так что он будет работать так же, как ваше контекстное меню.

демонстрация

person Sanket Kachhela    schedule 03.08.2014
comment
Я пробовал это... не работает. Я имею в виду, что это работает, но меню выглядит как всплывающее окно. Я хочу сделать контекстную панель действий. - person ; 04.08.2014
comment
много кода для осмотра. Android имеет собственное решение для панели действий, и я ищу, что я делаю неправильно, а не обходной путь. - person ; 04.08.2014