Android 从ArrayAdapter内部打开上下文菜单

Android 从ArrayAdapter内部打开上下文菜单,android,listview,contextmenu,android-arrayadapter,Android,Listview,Contextmenu,Android Arrayadapter,在自定义ArrayAdapter中的getView方法中有一个setOnClickLisnter方法 我想做的是,在列表视图的每一行中,只需短按一次图像按钮,我想让它打开一个上下文菜单 当前,当您长时间单击列表视图时,ContextMenu可以正常工作。现在我想把同样的功能移到上面提到的短点击上 我在我的onCreate中有这个: registerForContextMenu(getListView()); 活动中还有一个onCreateContextMenu我的主要问题是,如何从阵列适配器内

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

我想做的是,在
列表视图
的每一行中,只需短按一次
图像按钮
,我想让它打开一个上下文菜单

当前,当您长时间单击
列表视图时,ContextMenu可以正常工作。现在我想把同样的功能移到上面提到的短点击上

我在我的
onCreate
中有这个:

registerForContextMenu(getListView());
活动中还有一个
onCreateContextMenu
我的主要问题是,如何从
阵列适配器内部访问它?

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

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

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

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


您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项

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

您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项

点击此链接

和使用

@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);
    }
}
点击这个链接

和使用

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

这个问题由来已久,但如果其他人需要它: 不能直接打开关联菜单。但是,您可以长时间单击相应的视图。这将打开关联菜单。就你而言:

holder.ib1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

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

但是,请注意,您想要的并不是Android的设计指南。长时间的点击应该会打开上下文菜单,而不是普通的点击。

这个问题是老问题,但如果其他人需要它: 不能直接打开关联菜单。但是,您可以长时间单击相应的视图。这将打开关联菜单。就你而言:

holder.ib1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

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

但是,请注意,您想要的并不是Android的设计指南。长时间单击可以打开上下文菜单,而不是普通的单击。

如何对ArrayAdapter进行子分类,使其具有“活动”属性。在创建适配器时,将活动引用(即活动引用)传递给它。然后调用活动上的方法。这就是你想要的吗?我没想过那样做。现在,my
ArrayAdapter
是它自己的类。目前,我想先看看是否有使用这种方法的解决方案。如何对ArrayAdapter进行子分类,使其具有活动属性。在创建适配器时,将活动引用(即活动引用)传递给它。然后调用活动上的方法。这就是你想要的吗?我没想过那样做。现在,my
ArrayAdapter
是它自己的类。目前,我想先看看是否有使用这种方法的解决方案。这只是告诉我如何创建实际的上下文菜单,这不是问题所在。我需要知道如何将操作分配给ArrayAdapter中的按钮。这只是告诉我如何创建实际的上下文菜单,这不是问题所在。我需要知道如何将操作分配给ArrayAdapter中的按钮。是的,但您的编辑说编辑:我不必在setOncLickListner方法中执行此操作,我想说的就是在getView中的某个地方,但你必须在监听器中执行。我认为问题在于上下文菜单是预定义的,可以使用长点击打开。最好的方法可能是使用alertBuilder,而不是使用可点击的选项。我以前在短时间点击时制作过上下文菜单,所以我知道这很有效。。。想向我展示一个更基本的代码示例来说明您的意思吗?就alertbuilder而言,您可以使用builder.setView(view v)添加自定义视图;您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项。你知道这是个好主意。一个带有多选单选按钮的警报对话框将完全满足我的需要是的,但是你的编辑说编辑:我不必在setOncLickListner方法中这样做,我想说的就是在getView中的某个地方,但你必须在监听器中执行。我认为问题在于上下文菜单是预定义的,可以使用长点击打开。最好的方法可能是使用alertBuilder,而不是使用可点击的选项。我以前在短时间点击时制作过上下文菜单,所以我知道这很有效。。。想向我展示一个更基本的代码示例来说明您的意思吗?就alertbuilder而言,您可以使用builder.setView(view v)添加自定义视图;您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项。你知道这是个好主意。带有多选单选按钮的警报对话框正是我需要的