上下文操作栏不适用于ListActivity和BaseAdapter

时间:2014-08-03 20:09:41

标签: android baseadapter listactivity

我有一个扩展ListActivity的类和另一个扩展BaseAdapter的类。当我启动ListActivity类时,我填充一个对象列表并将其传递给Adapter。

当用户从列表中选择一个或多个itens时,我正试图显示一个上下文actoin栏但是我被卡住了。我已经尝试了很多方法,我发现只做一些接近的事情就是把一个监听器放在适配器的方法getView()上 - 但是当我这样做时,我不能执行多个选择而且上下文操作栏仍然无法正常工作

显示上下文菜单以及从ListView中选择itens缺少什么?

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;     
    }
}

1 个答案:

答案 0 :(得分:0)

以这种方式在listview列表上的setAdapter之后注册contextMenu ..

registerForContextMenu(getListView());

或者如果上面的方法不起作用,你可以为你的自定义布局视图创建contextmenuListner ..就像这样

v.setOnCreateContextMenuListener(this);

其他SO答案中的更多描述 https://stackoverflow.com/a/4001019/942224

您可以使用PopUpWindow。在这里,您可以将自定义视图显示为关于视图位置的弹出窗口..因此它将与您的上下文菜单相同。

demo