ListView- setChoiceMode,CHOICE_MODE_MULTIPLE_MODAL用于不同的方向

时间:2017-12-16 11:30:02

标签: android listview listener orientation custom-adapter

我在我的应用程序中使用listview,其中已经使用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 &安培;当试图删除相应的选定项目时,将不会删除。如果按下后退按钮(在我的应用程序活动中实现的横向模式),操作栏颜色将变为白色。

(以其他方式尝试以横向模式选择项目并旋转以在纵向中删除相同项目时也是如此)

一个解决方案是在清单

中使用以下内容

机器人:configChanges ="取向|屏幕尺寸"

如果使用此方法,则不会在方向更改时重新创建活动。由于它具有不同的纵向和横向布局,因此必须在方向更改时进行活动重建。

我知道问题是因为在每次调用 setMultiChoiceModeListener 的方向更改时都会重新创建活动。

有人可以帮助解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

使用这些方法存储和恢复所选项目的值。

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putInt("count",checkedItemCount);
    super.onSaveInstanceState(outState);
}

然后将其恢复为onCreate方法

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        //will return value of selecteditems
        int countedItems = savedInstanceState.getInt("count");

    }
}

以下是更多信息的链接:
How to use onSavedInstanceState example please