【发布时间】:2017-12-16 11:30:01
【问题描述】:
我在我的应用程序中使用列表视图,其中使用 ListView.CHOICE_MODE_MULTIPLE_MODAL 实现了 setChoiceMode。长按列表视图时,可以选择项目,但之后,如果屏幕方向改变,操作栏会很烦人。
我的代码是这样的
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new ItemListAdapter();
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode actionMode, int position, long l, boolean b) {
final int checkedItemCount = listView.getCheckedItemCount();
actionMode.setTitle(checkedItemCount + " Selected");
/*get the selected items*/
}
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
actionMode.getMenuInflater().inflate(R.menu.menu_listview_delete, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(final ActionMode actionMode, MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.delete_item:
/*delete selected items*/
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
adapter.removeSelection();
}
});
}
portrait mode & landscape mode 中的图片,显示选择项为 0 & 当尝试删除相应的选定项目时不会被删除。然后如果按下后退按钮(在我的应用程序活动中实现的横向模式下),操作栏颜色将变为白色。
(以其他方式尝试在横向模式下选择项目并旋转以删除纵向模式时也会发生同样的情况)
一个解决方案是在清单中使用下面的
android:configChanges="orientation|screenSize"
如果使用此方法,则不会在方向更改时重新创建活动。由于纵向和横向的布局不同,因此必须在方向更改时重新创建活动。
我知道问题是因为在方向更改时重新创建了活动,这使得 setMultiChoiceModeListener 每次都被调用。
有人可以帮助解决这个问题吗?谢谢!
【问题讨论】:
标签: android listview listener orientation custom-adapter