我有ListView,其中包含2种类型的数据。我想只在长按1种类型时才启动动作模式。
这是我启用动作模式的方式。
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(multiChoiceModeListener);
如何为第二种视图类型禁用操作模式。
答案 0 :(得分:0)
这是我的解决方案:
public class DeviceExclListView extends ListView{
private ActionMode mAm;
private boolean mActionModeStarted;
public DeviceExclListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public DeviceExclListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DeviceExclListView(Context context) {
super(context);
}
@Override
public ActionMode startActionMode(Callback callback) {
return mAm = super.startActionMode(callback);
}
@Override
public boolean performItemClick(View view, int position, long id) {
Object item = getItemAtPosition(position);
if(item instanceof DeviceItem && mActionModeStarted){
return true;
}else{
return super.performItemClick(view, position, id);
}
}
@Override
public void setItemChecked(int position, boolean value) {
Object item = getItemAtPosition(position);
if(item instanceof DeviceItem){
mAm.finish();
}else{
super.setItemChecked(position, value);
}
}
public boolean isActionModeStarted() {
return mActionModeStarted;
}
public void setActionModeStarted(boolean mActionModeStarted) {
this.mActionModeStarted = mActionModeStarted;
}
}
setActionModeStarted由MultiChoiceModeListenerCallback设置。因此,当我长按DeviceItem动作模式立即关闭并且在动作模式期间无法检查时。
答案 1 :(得分:0)
以下适用于我(适用于AbsListView.MultiChoiceModeListener
回调):
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked)
{
Item item = mAdapter.getItem(position);
if (!item.checkable && checked) {
// Uncheck the item
mListView.setItemChecked(position, false);
return;
}
// the rest of the usual logic
// ...
}
基本上,如果选中了不应检查的项目,我们取消选中它。