Android 如何为具有分离ListAdapter的ListView实现ContextMenu?
我在列表视图中使用 我的代码如下:Android 如何为具有分离ListAdapter的ListView实现ContextMenu?,android,android-listview,contextmenu,Android,Android Listview,Contextmenu,我在列表视图中使用 我的代码如下: ListView photos_list = (ListView) findViewById(R.id.photos_list); separate_adapter = new SeparatedListAdapter(this); AddedPhotosAdapter one_adapter = new AddedPhotosAdapter(this, R.layout.row_acc_info , photos_instagram); separate
ListView photos_list = (ListView) findViewById(R.id.photos_list);
separate_adapter = new SeparatedListAdapter(this);
AddedPhotosAdapter one_adapter = new AddedPhotosAdapter(this, R.layout.row_acc_info , photos_instagram);
separate_adapter.addSection(" Section1 ", one_adapter);
AddedPhotosAdapter two_adapter = new AddedPhotosAdapter(this, R.layout.row_acc_info , photos_fb);
separate_adapter.addSection(" Section2 ", two_adapter);
AddedPhotosAdapter three_adapter = new AddedPhotosAdapter(this, R.layout.row_acc_info , photos_picasa);
separate_adapter.addSection(" Section3 ", thee_adapter);
photos_list.setAdapter(separate_adapter);
我也注册了contextmenu
registerForContextMenu(photos_list);
这是创建上下文菜单和从菜单中选择项的代码
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (v.getId() == R.id.photos_list) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
Log.i(TAG, "*********position******" +info.position);
Object item = separate_adapter.getItem(info.position);
PhotosInfo total = (PhotosInfo) item ;
menu.setHeaderTitle(total.getPhoto_Name());
menu.add(0, 1, 0, "Delete photo account");
menu.add(0, 2, 1, "Cancel");
}
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
if (item.getGroupId() == 0) {
switch(item.getItemId()) {
case 1:
break;
case 2:
break;
}
}
return super.onContextItemSelected(item);
}
这是我在使用SeparateListAdapter的列表视图中使用的代码,我在这里遇到了这个错误FATAL EXCEPTION:main
E/AndroidRuntime(9228):java.lang.ClassCastException:java.lang.String
E/AndroidRuntime(9228):在com.colors.pipemedia.photos.PhotosMain.onCreateContextMenu(PhotosMain.java:170)
这是导致代码错误的行
PhotosInfo total = (PhotosInfo) item ;
我使用此代码作为单适配器,它工作正常。但如果我与单独的列表适配器一起使用,它的给出错误。此要求的解决方案是什么?我假设您正在使用(尽管您应该发布此链接,因为SeparatedListAdapter不是标准组件,您应该始终提供与您的问题相关的代码。我编辑了您的帖子以包含此链接)
问题是,正如您在getItem()
中所看到的,如果参数是0
,它将只返回一个字符串
节名,否则它将返回您的适配器
中的类型1的项
因此,为了避免出现异常,只需检查返回的类型,如下所示:
Object item = separate_adapter.getItem(info.position);
if (item instanceof String) {
// It's a section title, do something about it
} else {
// It's an actual item from one of the adapters
PhotosInfo total = (PhotosInfo) item ;
menu.setHeaderTitle(total.getPhoto_Name());
menu.add(0, 1, 0, "Delete photo account");
menu.add(0, 2, 1, "Cancel");
}
是的,我只使用那个适配器。那么如何解决这个问题呢。