2013-11-28 36 views
0

GridView相關的CAB使用下面的代碼我編程顯示:安卓:重置一個GridView的選擇模式爲默認

fileDirGridView.setMultiChoiceModeListener(gridViewMultiChoiceModeListener); 
fileDirGridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL); 
fileDirGridView.setItemChecked(position, true); 

現在我想以解離multiChoiceModeListener和設置一切回到原來的老路它之前。要做到這一點,我使用下面的代碼總是會導致StackOverFull錯誤。

 @Override 
     public void onDestroyActionMode(ActionMode arg0) { 
      // TODO Auto-generated method stub 
      fileDirGridView.setChoiceMode(GridView.CHOICE_MODE_NONE); 

     } 

Logcat

11-28 07:26:31.780: E/AndroidRuntime(14875): FATAL EXCEPTION: main 
11-28 07:26:31.780: E/AndroidRuntime(14875): java.lang.StackOverflowError 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneWindow.java:2562) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.app.ActionBarImpl$ActionModeImpl.finish(ActionBarImpl.java:846) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView.setChoiceMode(AbsListView.java:1150) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.example.androidfilemanager.MainActivity$7.onDestroyActionMode(MainActivity.java:465) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at android.widget.AbsListView$MultiChoiceModeWrapper.onDestroyActionMode(AbsListView.java:6027) 
11-28 07:26:31.780: E/AndroidRuntime(14875): at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onDestroyActionMode(PhoneW 
+0

你可以發佈'logcat'嗎? –

+0

@AmulyaKhare將logcat添加到問題中 – thunderbird

回答

2

我設置了choiceMode這就造成stackoverflow錯誤onDestroyActionMode()內。所以我剛剛在同一個方法中啓動了一個新線程,並在創建的線程中重置了choiceMode

@Override 
     public void onDestroyActionMode(ActionMode mode) { 
      // TODO Auto-generated method stub 
      Thread thread = new Thread() 
      { 
       @Override 
       public void run() { 
        fileDirGridView.clearChoices(); 
        fileDirGridView.setChoiceMode(GridView.CHOICE_MODE_NONE);  
       } 
      }; 

      thread.start(); 
     }