戻るボタンを押した時に呼ばれるfinishメソッドですが、getFragmentsで受け取ったlistはpopBackStackをすると、listにnullが入ってしまうという記事を見て、nullを削除するfor文を入れています。(これが正しいのかわかりませんが。。)
index = sizeになってIndexOutOfBoundsExceptionが起こっているわけですが、
listからgetしている部分は2箇所しかなく、どちらも
list.get(list.size()-1)
という形になっています。
これではIndexOutOfBoundsにならないと思うのですが、何なんでしょうか?
下に其の部分のコードとエラーメッセージを載せます
よろしくお願いします。
Java
1public void finish() { 2 fragmentPage1 = ((FragmentPage1) ((MyFragmentPagerAdapter) viewPager.getAdapter()).findFragmentByPosition(viewPager, 0)); 3 List<Fragment> flist = fragmentPage1.getChildFragmentManager().getFragments(); 4 Fragment last = flist.get(flist.size()-1); 5 while(last == null && flist.size() > 1){ 6 flist.remove(flist.size()-1); 7 last = flist.get(flist.size()-1); 8 } 9 if (last instanceof FragmentChooseYear) { 10 super.finish(); 11 } else if (last instanceof FragmentChooseMonth) { 12 Log.d("a", "Month"+flist.size()); 13 fragmentPage1.getChildFragmentManager().popBackStack(); 14 } else if (last instanceof FragmentChooseDay) { 15 Log.d("a", "Day"+flist.size()); 16 fragmentPage1.getChildFragmentManager().popBackStack(); 17 } else if (last instanceof FragmentSetTimeAndStr) { 18 Log.d("a", "Time"+flist.size()); 19 fragmentPage1.getChildFragmentManager().popBackStack(); 20 }else if(last == null){ 21 Log.d("finish","null"+flist.size() ); 22 } else { 23 Log.d("finish","error"+flist.size() ); 24 } 25 }
エラーメッセージ
06-09 02:06:44.825 11022-11022/teppei.reminder E/AndroidRuntime: FATAL EXCEPTION: main Process: teppei.reminder, PID: 11022 java.lang.IndexOutOfBoundsException: Invalid index 13, size is 13 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.set(ArrayList.java:481) at android.support.v4.app.FragmentManagerImpl.makeActive(FragmentManager.java:1181) at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1206) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:704) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:155) at android.app.ActivityThread.main(ActivityThread.java:5702) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)

回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。