我目前正在将我的应用程序更改为使用AppCompat版本21,以便可以将Material design包含到我的应用程序中。
我的活动之一是列表视图,该类正在扩展ActionBarActivity。
因为这不是列表活动,所以我改用findViewById获取列表视图并将其存储在变量中,这样我就可以在整个类中使用它来设置列表视图的各个方面。
但是,由于某种原因,它最初是可以工作的,因为我已经实现了工具栏来代替操作栏并使用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;
}
}
为什么listView.clearChoices()
每次检查项目状态更改时都打电话?我没有看到完整的代码,但似乎您清除了所有检查,然后仅检查了该项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句