1

我的自定义 ArrayAdapter中的方法中有一个setOnClickLisnter方法。getView

我想要做的是,imageButton在每行内单击一次ListView,我希望它打开一个 ContextMenu。

当您长按ListView. 现在我想将相同的功能转移到上面提到的短按上。

我的里面有这个onCreate

registerForContextMenu(getListView());

我也有一个onCreateContextMenu里面的Activity。 我的主要问题是,您如何从内部访问它ArrayAdapter

编辑: 我不必在setOncLickListner方法中执行此操作,只需在getView

获取视图的代码:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {

            convertView = inflater.inflate(R.layout.commentlayout, parent,
                    false);
            holder = new ViewHolder();
            holder.ib1 = (ImageButton) convertView
                    .findViewById(R.id.labelChatIcon);


            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
            convertView.setOnCreateContextMenuListener(null);
        }

        holder.ib1.setBackgroundColor(Color.TRANSPARENT);

        holder.ib1.setBackgroundColor(Color.TRANSPARENT);
        holder.ib1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                // Open Context Menu here

            }
        });

        return convertView;
    }

更新:我想我正在改变我的计划,并将使用带有单选按钮的警报对话框。在这种情况下,上下文菜单可能不合适。

4

3 回答 3

1

您可以使用 Alert.Builder 而不是上下文菜单,您可以使用添加自定义视图 builder.setView(View v);

您将有一个布局文件,其中包含一堆不同宽度的按钮:match_parent。查看此链接以获取所有可用的不同选项

于 2013-01-07T03:24:55.370 回答
0

按照这个链接http://developer.android.com/guide/topics/ui/menus.html

并使用

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


@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.edit:
            editNote(info.id);
            return true;
        case R.id.delete:
            deleteNote(info.id);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
于 2013-01-07T03:50:19.620 回答
0

这个问题很老,但万一其他人需要它:您不能直接打开上下文菜单。但是,您可以长按相应的视图。这将打开上下文菜单。在你的情况下:

holder.ib1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                // Open Context Menu here
                convertView.performLongClick();
            }
        });

但是,请注意,您想要的并不符合 Android 的设计准则。长按应该打开上下文菜单,而不是正常单击。

于 2016-01-11T20:49:09.873 回答