2014-10-24 4 views
2

현재 내 앱에 재질 디자인을 포함 할 수 있도록 AppCompat 버전 21을 사용하도록 내 앱을 변경하고 있습니다.AppCompat를 사용하는 문맥 액션 바

내 활동 중 하나가 목록보기를 가지고 있으며, 클래스는 ActionBarActivity를 확장하고 있습니다.

목록 활동이 아니므로 findViewById를 사용하여 목록보기를 가져 와서이를 변수에 저장하면 클래스 전체에서 목록보기의 다양한 측면을 설정할 수 있습니다.

그러나 작업 표시 줄을 대체하고 AppCompat를 사용하여 도구 모음을 구현 한 이후로 어떤 이유로 다중 선택이 더 이상 작동하지 않습니다. 하나의 항목을 선택할 수 있으며 그 밖의 모든 항목은 여러 항목을 선택할 수 있습니다. 당신이 제공 할 수있는 어떤 도움

Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 

      CommonTasks commonTasks = new CommonTasks(ConnectionManager.this); 
      SharedPreferences settings = commonTasks.getAppsSharedPreferences(); 

      adView = (AdView) findViewById(R.id.adView); 
      CommonTasks.getAddRequest(ConnectionManager.this, adView, settings.getBoolean(Defines.SharedPreferenceSettings.UPGRADE_PURCHASED, false)); 

      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

      swipeDetector = new SwipeDetector(); 
      listView = (ListView)findViewById(android.R.id.list); 
      listView.setOnTouchListener(swipeDetector); 
      listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
      listView.setOnItemClickListener(mListItemClickListener); 
      listView.setMultiChoiceModeListener(new ModeCallBack()); 

      listView.setOnItemClickListener(mItemClickListener); 

private class ModeCallBack implements MultiChoiceModeListener 
    { 

     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 

      switch (item.getItemId()) 
      { 
       case R.id.manageCon_mnuDeleteConnection: 
        deleteConnection(selectedConnectionName); 
        break; 
       case R.id.manageCon_mnuEditConnection: 
        editConnection(selectedConnectionName); 
        break; 
      } 
      return false; 
     } 

     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) { 

      MenuInflater inflator = getMenuInflater(); 
      inflator.inflate(R.menu.manage_connections_context, menu); 
      mode.setTitle("Change Connection"); 
      return true; 
     } 

     @Override 
     public void onDestroyActionMode(ActionMode mode) { 

     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 

      return true; 
     } 

     @Override 
     public void onItemCheckedStateChanged(ActionMode mode, int position, 
       long id, boolean checked) { 
      if (!handlingDBSelection) 
      { 
       handlingDBSelection = true; 
       selectedConnectionName = connectionArrayAdapter.getItem(position) 
         .toString(); 
       final int checkedCount = listView.getCheckedItemCount(); 
       switch (checkedCount) 
       { 
        case 0: 
         mode.setSubtitle(null); 
         break; 
        default: 
         listView.clearChoices(); 
         listView.setItemChecked(position, true); 
         break; 
       } 
       handlingDBSelection = false; 
      } 
     } 

감사 :

은 아래 목록보기를 얻고 클릭 리스너 및 다중 선택 모드 등을 설정하는 내 코드입니다.

답변

1

항목 체크 상태가 변경 될 때마다 listView.clearChoices() 번으로 전화하는 이유는 무엇입니까? 전체 코드가 표시되지 않지만 모든 체크를 지운 다음 해당 항목을 체크하는 것처럼 보입니다.

+0

잘 잡습니다. 나는 그것이 그곳에 있었던 이유를 모르며, 거기에 있었기 때문에 그 코드가 어떻게 작동했는지 나는 알지 못합니다. – Boardy