我目前正在努力将我的应用更改为使用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;
}
}
感谢您提供的任何帮助。
答案 0 :(得分:1)
为什么每次检查项目状态发生变化时都会调用listView.clearChoices()
?我没有看到整个代码,但似乎你清除了所有的检查,然后检查那个项目。