2013-11-28 34 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(); 
     }