如果是在ListView进行创建的上下文菜单,那么如何获取ListView所单击列项的数据呢?
有两种方式可获取:
1、 可以通过在长时间点击OnLongItemClick方法事件,将所单击的View数据进行临时保存,成为一个全局变量,那么在一个Activity里面的所有方法内均可访问
2、 可以通过onContextItemSelected方法里面进行获取ListView某一项的数据,
a) AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
b) String name = ((TextView) info.targetView.findViewById(R.id.bookName)).getText().toString();
这种方式获得ListView布局文件中对应的数据
localBookList.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView parent, View view,int position, long id) { list_Temp = (HashMap) parent.getItemAtPosition(position);//list_Temp是全局变量 return false; } });
如此,在创建ContextMenu的时候,首先会将数据存储到临时的list_Temp全局变量中,因此在ContextMenu的子Menu里均可访问到该ListView的子项的数据。另外也可以采用:
@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item .getMenuInfo(); String name = ((TextView) info.targetView.findViewById(R.id.bookName)) .getText().toString(); switch (item.getItemId()) { case BOOK_CONTEXT_MENU_DETAIL:Toast.makeText(AndroidBook_MainActivity.this, name, 3).show(); break; default: break; } return super.onContextItemSelected(item); }
这种方式只能获取list_item.xml里面定义的控件对应的值,无法获取其他的值,比如说:ListView控件里面有书名,。。。等等但是没有文件在SD卡里面的路径,除非将路径的字符串也存储到ListView里面去。