조각을 사용하는 방법을 배우고 있습니다. Fragment
클래스 상단에 세 개의 인스턴스 가 초기화되어 있습니다. 다음과 같은 활동에 조각을 추가하고 있습니다.
선언 및 초기화 :
Fragment A = new AFragment();
Fragment B = new BFragment();
Fragment C = new CFragment();
교체 / 추가 :
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, A);
ft.addToBackStack(null);
ft.commit();
이 스 니펫이 제대로 작동합니다. 모든 프래그먼트가 액티비티에 첨부되며 아무런 문제없이 백 스택에 저장됩니다.
그래서 시작할 때 A
, C
다음과 B
같은 스택 외모 :
| |
|B|
|C|
|A|
___
그리고 '뒤로'버튼을 누르면 B
파괴되고 C
다시 시작됩니다.
그러나 A
두 번째로 조각 을 시작하면 백 스택에서 다시 시작하는 대신 백 스택의 맨 위에 추가됩니다.
| |
|A|
|C|
|A|
___
그러나 나는 A
그 위에있는 모든 조각 을 재개 하고 파괴 하고 싶습니다 (있는 경우). 사실, 나는 기본 백 스택 동작을 좋아합니다.
어떻게하면 되나요?
예상 : ( A
다시 시작하고 상단 조각을 파괴해야 함)
| |
| |
| |
|A|
___
편집 : (AC에서 제안)
이것은 내 시도 코드입니다.
private void selectItem(int position) {
Fragment problemSearch = null, problemStatistics = null;
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
String backStateName = null;
Fragment fragmentName = null;
boolean fragmentPopped = false;
switch (position) {
case 0:
fragmentName = profile;
break;
case 1:
fragmentName = submissionStatistics;
break;
case 2:
fragmentName = solvedProblemLevel;
break;
case 3:
fragmentName = latestSubmissions;
break;
case 4:
fragmentName = CPExercise;
break;
case 5:
Bundle bundle = new Bundle();
bundle.putInt("problem_no", problemNo);
problemSearch = new ProblemWebView();
problemSearch.setArguments(bundle);
fragmentName = problemSearch;
break;
case 6:
fragmentName = rankList;
break;
case 7:
fragmentName = liveSubmissions;
break;
case 8:
Bundle bundles = new Bundle();
bundles.putInt("problem_no", problemNo);
problemStatistics = new ProblemStatistics();
problemStatistics.setArguments(bundles);
fragmentName = problemStatistics;
default:
break;
}
backStateName = fragmentName.getClass().getName();
fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped) {
ft.replace(R.id.content_frame, fragmentName);
}
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(backStateName);
ft.commit();
// I am using drawer layout
mDrawerList.setItemChecked(position, true);
setTitle(title[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
내가 시작할 때 문제는, A
다음 B
, 다음을 눌러 '돌아 가기' B
를 제거하고 A
다시 시작됩니다. 다시 '뒤로'를 누르면 앱이 종료됩니다. 그러나 그것은 빈 창을 표시하고 그것을 닫으려면 세 번 눌러야합니다.
또한, 나는 시작하면 A
, 다음 B
, 다음 C
, 다음, B
다시 ...
예상 :
| |
| |
|B|
|A|
___
실제 :
| |
|B|
|B|
|A|
___
onBackPressed()
사용자 지정으로 재정의해야합니까, 아니면 뭔가 빠졌습니까?