您的位置:首页 > 移动开发 > Android开发

android action bar 多选操作 兼容2.X的方法

2014-04-11 00:37 197 查看
大概有2种方式,1是用setMultiChocie方法,但是遗憾的是2.X版本不支持,最低版本要求是api11.

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) {

}

@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
return false;
}

@Override
public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
return false;
}

@Override
public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
return false;
}

@Override
public void onDestroyActionMode(android.view.ActionMode mode) {

}
});


无奈用第2种方式:mActionMode,虽然稍微麻烦点儿。

下面就主要介绍mActionMode形式的用法。

首先,长按时启动actionMode

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (mActionMode == null) {
mActionMode = startSupportActionMode(new MyActionModeCallback());
}

return true;
}
});


其次,自定义ActionMode.Callback类,并在创建的回调里加载contextual menu

private class MyActionModeCallback implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
actionMode.getMenuInflater().inflate(R.menu.context_menu, menu);
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}

@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}

@Override
public void onDestroyActionMode(ActionMode actionMode) {
list.get(position).setSelected(false);
adapter.notifyDataSetChanged();
mActionMode = null; 

} }
然后,写listView的子项点击事件

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mActionMode != null) {
LogCat.v(TAG + "position:" + position);
list.get(position).setSelected(!list.get(position).isSelected());

adapter.notifyDataSetChanged();

}

}
});
然后,在适配器 getView方法里根据bool设置背景颜色。

if (list.get(position).isSelected()) {
view.setBackgroundColor(context.getResources().getColor(R.color.blue_light));
} else {
view.setBackgroundColor(Color.TRANSPARENT);
}


关键步骤就是上面的这几步。

还有几点注意:

注册监听时要绑定适配器。

mActionMode = startSupportActionMode(new MyActionModeCallback());

start的时候是有返回值的,要给mActionMode值,我就是因为忘了,所以导致长按后的子项点击事件没有log而纠结半天。

先写这么多,后续的多选完成后的删除操作明天加上。



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐