我制作了一个自定义列表适配器,扩展了 Base 适配器。列表中的每个项目都有一个图像按钮、2 个文本视图和一个按钮。我尝试将上下文菜单添加到列表中,以便显示列表中某个项目的一些选项。
registerForContextMenu(getListView());
我使用 MenuInflater 对象来扩充上下文菜单 xml 文件。但是在单击列表中的项目时,没有任何显示或单击时列表项目的通常突出显示未显示。上下文菜单是否不适用于自定义列表视图?任何帮助将非常感激。
问候,原始
我制作了一个自定义列表适配器,扩展了 Base 适配器。列表中的每个项目都有一个图像按钮、2 个文本视图和一个按钮。我尝试将上下文菜单添加到列表中,以便显示列表中某个项目的一些选项。
registerForContextMenu(getListView());
我使用 MenuInflater 对象来扩充上下文菜单 xml 文件。但是在单击列表中的项目时,没有任何显示或单击时列表项目的通常突出显示未显示。上下文菜单是否不适用于自定义列表视图?任何帮助将非常感激。
问候,原始
确保 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);
}
我希望它有所帮助。
在适当的地方调用 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);
}
}
它应该适用于自定义列表适配器。唯一想到的是registerForContextMenu()需要在之后调用setListAdapter()(如果您正在使用ListActivity)。
我在扩展 ListActivity 时使用自定义适配器遇到了类似的问题。
我发现我必须确保setContentView之前调用过setOnCreateContextMenuListener它才能使这些事件正确注册。
例子:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getListView().setOnCreateContextMenuListener(this);
// do adapter calls etc here
}
希望这可以帮助。