2

我制作了一个自定义列表适配器,扩展了 Base 适配器。列表中的每个项目都有一个图像按钮、2 个文本视图和一个按钮。我尝试将上下文菜单添加到列表中,以便显示列表中某个项目的一些选项。

registerForContextMenu(getListView());

我使用 MenuInflater 对象来扩充上下文菜单 xml 文件。但是在单击列表中的项目时,没有任何显示或单击时列表项目的通常突出显示未显示。上下文菜单是否不适用于自定义列表视图?任何帮助将非常感激。

问候,原始

4

4 回答 4

9

确保 ListView 的子项必须是 Long Clickeable。

可以在xml布局文件中完成,例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:longClickable="true">

    <!-- Child elements -->

</LinearLayout>

或者它可以在java代码中完成:

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
   CustomView customView = new CustomView();
   customView.setLongClickeable(true);
}

我希望它有所帮助。

于 2012-04-28T23:08:34.400 回答
4

在适当的地方调用 registerForContextMenu,onCreateView 或 onCreate。

registerForContextMenu(getListView());

在您的适配器中实现,如下所示。

 public class CustomeLabelAdpater extends BaseAdapter implements View.OnCreateContextMenuListener{

将此行放在您的 getView 方法中。

vi.setOnCreateContextMenuListener(this);

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        vi.setOnCreateContextMenuListener(this);
}

将此方法作为空白放在您的适配器中。

 public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
         // empty implementation
       }

然后,您在片段或活动中覆盖 onCreateContextMenu 和 onContextItemSelected。

@Override
public void onCreateContextMenu(ContextMenu contextMenu, View view,
                                ContextMenu.ContextMenuInfo contextMenuInfo) {
    // create context the menu
    Activity.getMenuInflater().inflate(R.menu.context_menu, contextMenu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.open:
                return true;
            default:
                return super.onContextItemSelected(item);
        }
}
于 2012-11-02T06:56:39.043 回答
4

它应该适用于自定义列表适配器。唯一想到的是registerForContextMenu()需要在之后调用setListAdapter()(如果您正在使用ListActivity)。

于 2010-05-11T18:28:10.083 回答
0

我在扩展 ListActivity 时使用自定义适配器遇到了类似的问题。

我发现我必须确保setContentView之前调用过setOnCreateContextMenuListener它才能使这些事件正确注册。

例子:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    getListView().setOnCreateContextMenuListener(this);

    //  do adapter calls etc here

}

希望这可以帮助。

于 2011-09-04T03:42:29.127 回答