2014-06-09 1 views
2

2 가지 유형의 데이터가 포함 된 ListView가 있습니다. 1 유형을 길게 누르면 작업 모드를 시작하고 싶습니다.ActionView 시작은 ListView 항목 유형에 따라 다릅니다.

이렇게하면 동작 모드가 활성화됩니다.

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

두 번째보기 유형에 대한 동작 모드를 해제하는 방법. setActionModeStarted가 MultiChoiceModeListenerCallback에 의해 잘 살고있다

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; 
} 


} 

:

답변

0

여기 내 솔루션입니다. 따라서 DeviceItem actionmode를 길게 누르면 즉시 닫히고 동작 모드에서는 확인할 수 없습니다.

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

는 기본적으로, 우리가 선택을 취소합니다.

관련 문제