Android 从选定的Listview项设置上下文菜单的标题
如何从选定的Android 从选定的Listview项设置上下文菜单的标题,android,Android,如何从选定的Listview项设置关联菜单的标题?以下是我的主要活动 public class OListActivity extends ListActivity { ...... ...... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
Listview
项设置关联菜单的标题?以下是我的主要活动
public class OListActivity extends ListActivity {
......
......
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
registerForContextMenu(getListView());
......
......
MatrixCursor cursor;
cursor = NameManager.getnameList();
startManagingCursor(cursor);
String[] from = { "name", "info", "status", BaseColumns._ID };
int[] to = { R.id.name, R.id.info, R.id.status };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.row, cursor, from, to);
setListAdapter(adapter);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Menu");// TODO Change to name of selected listview item.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
.....
.....
我需要将
菜单设置为R.id.name
。我知道另一个类似的例子,但它没有提到如何处理具有多个文本视图的复杂的列表视图。使用onCreateContextMenu()方法中的ContextMenuInfo
参数:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo info;
try {
// Casts the incoming data object into the type for AdapterView objects.
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
// If the menu object can't be cast, logs an error.
Log.e(TAG, "bad menuInfo", e);
return;
}
Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
if (cursor == null) {
// For some reason the requested item isn't available, do nothing
return;
}
// if your column name is "name"
menu.setHeaderTitle(cursor.getString(cursor.getColumnIndex("name")));
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
我知道这是一篇很老的帖子,也是正确的答案。然而,在今天使用它时,我遇到了一些我想补充的东西
ContextMenuInfo
参数用于查找启动ContextMenu的确切项目位置,即我们的adpater项目
因此,它可以使用positioninfo.position
返回适配器的getItem()方法中定义的类型的项,正如上面所述,getItem()方法返回一个游标对象
(在我的例子中,它返回了一个模型类,然后我意识到要通过菜单.setHeaderTitle()
设置标题,我可以传递我的模型支持的方法,比如Model.getItamName()
)
另外,请记住,如果AdapterView包含任何标题,则在使用menuInfo获取位置时必须将其排除。像
Cursor cursor = (Cursor) getListAdapter().getItem(info.position - yourList.getHeaderViewsCount());
希望这对某人有帮助。:) 很好,谢谢你。顺便说一句,我必须切换到菜单.setHeaderTitle(cursor.getString(1))
@binoybau您是对的方法getString()
需要int
而不是字符串。我累了,我正在考虑使用cursor.getString(cursor.getColumnIndex(“name”))方法代码>。别担心。你是我的英雄。睡一会儿好吗?@Luksprog这太棒了;)非常感谢!