【问题标题】:Disable ActionMode starting depends on ListView item type禁用 ActionMode 启动取决于 ListView 项目类型
【发布时间】:2014-06-09 12:26:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-listview android-actionmode


    【解决方案1】:

    这是我的解决方案:

    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 动作模式时会立即关闭,并且在动作模式下无法检查。

    【讨论】:

      【解决方案2】:

      以下对我有用(对于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
          // ...
      }
      

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

      【讨论】:

        猜你喜欢
        • 2017-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        相关资源
        最近更新 更多