使用AppCompat的上下文操作栏

时间:2014-10-24 22:56:51

标签: android android-appcompat contextual-action-bar

我目前正在努力将我的应用更改为使用AppCompat版本21,以便我可以将材料设计包含到我的应用中。

我的一个活动有一个列表视图,该类正在扩展ActionBarActivity。

因为它不是列表活动,所以我使用findViewById获取列表视图并将其存储在变量中,以便我可以在整个类中使用它来设置列表视图的各个方面。

然而,由于某种原因,它最初正在工作,因为我已经实现了工具栏来替换Action Bar并使用AppCompat,因此多重选项不再有效。我可以选择一个项目,其他一切工作只是它的多项选择。

以下是获取列表视图和设置点击监听器和多选模式等的代码:

Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            CommonTasks commonTasks = new CommonTasks(ConnectionManager.this);
            SharedPreferences settings = commonTasks.getAppsSharedPreferences();

            adView = (AdView) findViewById(R.id.adView);
            CommonTasks.getAddRequest(ConnectionManager.this, adView, settings.getBoolean(Defines.SharedPreferenceSettings.UPGRADE_PURCHASED, false));

            getSupportActionBar().setDisplayHomeAsUpEnabled(true);

            swipeDetector = new SwipeDetector();
            listView = (ListView)findViewById(android.R.id.list);
            listView.setOnTouchListener(swipeDetector);
            listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
            listView.setOnItemClickListener(mListItemClickListener);
            listView.setMultiChoiceModeListener(new ModeCallBack());

            listView.setOnItemClickListener(mItemClickListener);

private class ModeCallBack implements MultiChoiceModeListener
    {

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

            switch (item.getItemId())
            {
                case R.id.manageCon_mnuDeleteConnection:
                    deleteConnection(selectedConnectionName);
                    break;
                case R.id.manageCon_mnuEditConnection:
                    editConnection(selectedConnectionName);
                    break;
            }
            return false;
        }

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {

            MenuInflater inflator = getMenuInflater();
            inflator.inflate(R.menu.manage_connections_context, menu);
            mode.setTitle("Change Connection");
            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {

            return true;
        }

        @Override
        public void onItemCheckedStateChanged(ActionMode mode, int position,
                long id, boolean checked) {
            if (!handlingDBSelection)
            {
                handlingDBSelection = true;
                selectedConnectionName = connectionArrayAdapter.getItem(position)
                        .toString();
                final int checkedCount = listView.getCheckedItemCount();
                switch (checkedCount)
                {
                    case 0:
                        mode.setSubtitle(null);
                        break;
                    default:
                        listView.clearChoices();
                        listView.setItemChecked(position, true);
                        break;
                }
                handlingDBSelection = false;
            }
        }

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

为什么每次检查项目状态发生变化时都会调用listView.clearChoices()?我没有看到整个代码,但似乎你清除了所有的检查,然后检查那个项目。