2014-10-23 6 views
0

나는 listview에서 선택한 항목을 삭제하고 선택한 항목을 편집하기 위해 하나의 버튼을 삭제하는 사용자 정의 문맥 액션 바를 구현했습니다. 내가하려고하는 것은 두 개 이상의 항목이 선택되었을 때 editButton을 보이지 않게 만드는 것입니다. 나는 이런 식으로 일을 시도했지만 아무 반응이 없습니다 :버튼을 보이지 않게 설정하는 문맥 액션 바

public void OnItemCheckedStateChanged (ActionMode mode, int position, long id, bool check) 
{ 
    SetSubtitle (mode); 
    if (listview.CheckedItemCount > 1) { 
     disableButtonFlag = true; 
    } else 
     disableButtonFlag = false; 

    self.InvalidateOptionsMenu(); 
} 

public bool OnCreateActionMode (ActionMode mode, IMenu menu) 
{ 
    self.MenuInflater.Inflate (Resource.Menu.CAB_menu, menu); 
    if (disableButtonFlag) { 
     menu.FindItem(Resource.Id.action_edit).SetVisible(false); 
    } else { 
     menu.FindItem(Resource.Id.action_edit).SetVisible(true);    
    } 
    mode.Title = "Select Items"; 
    SetSubtitle (mode); 
    return true; 
} 
+0

"SetVisible (..)"행이 실행되고 있는지 확인하기 위해 코드를 한 단계 밟았습니까? – C4u

+0

OnCreationActionMode()가 전혀 호출되지 않는다고 생각합니다 .. –

+0

추측을 중지하고 그것을 증명하십시오. 그것을 확인하는 데 약 1-2 분이 걸릴 것입니다. OnItemCheckedStateChanged()의 첫 번째 줄에 중단 점을 설정하고 코드를 디버깅합니다. 그것을 통해 단일 단계 및 그것을 통해 실행되는 방법을 확인하십시오. 어디 OnCreateActionMode() isnt 어디서나 나는 이벤트로 행동해야한다고 생각합니다. 이 이벤트 핸들러가 설정 되었습니까? – C4u

답변

0

마지막으로 나는 실수를 발견했습니다! 내 OnPrepareActionMode() 방법 내에서 이러한 행을 선언 한 후 OnItemCheckedStateChanged() 메소드 내 ActionMode.Invalidate()라고해야 내 OnCreateActionMode 방법 내에서

if (listview.CheckedItemCount > 1) { 
     disableButtonFlag = true; 
    } else 
     disableButtonFlag = false; 

을 내 OnItemCheckedStateChanged() 방법에 Activity.InvalidateOptionsMenu()를 호출 : 그것은 대신이 선언이었다.

0

이 여러 항목을 처리하는 것은 나를 위해 작동하는 방법이다 : 선택된 인덱스 변경을 확인, 얼마나 많은 인덱스를 확인

private void listView_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      if(listView.SelectedIndices.Count > 1) 
      { 
       MessageBox.Show("Multiple rows selected!"); 
      } 
     } 

합니다. 두 개 이상 (= 복수) 인 경우 코드를 실행하십시오.