2

我有 ListView,其中包含 2 种类型的数据。只有在长按 1 种类型时,我才想启动动作模式。

这就是我启用动作模式的方式。

 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
 listView.setMultiChoiceModeListener(multiChoiceModeListener);

如何禁用第二种视图类型的操作模式。

4

2 回答 2

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
    // ...
}

基本上,如果不应该选中的项目被选中,我们取消选中它。

于 2015-01-05T04:43:45.830 回答
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 动作模式时会立即关闭,并且在动作模式下无法检查。

于 2014-06-09T13:19:47.863 回答