Parçaların nasıl kullanılacağını öğreniyorum. FragmentSınıfın üstünde başlatılan üç örneğim var . Ben böyle bir etkinliğe parça ekliyorum:
Beyan ve başlatma:
Fragment A = new AFragment();
Fragment B = new BFragment();
Fragment C = new CFragment();
Ekleme / Değiştirme:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, A);
ft.addToBackStack(null);
ft.commit();
Bu snippet'ler düzgün çalışıyor. Her parça etkinliğe eklenir ve herhangi bir sorun olmadan arka yığına kaydedilir.
Yani, başlattığımda A, Cve sonra B, yığın şöyle görünür:
| |
|B|
|C|
|A|
___
Ve 'geri' düğmesine bastığımda Byok edildi ve Cyeniden başlatıldı.
Ancak, parçayı Aikinci kez başlattığımda , arka yığından devam etmek yerine, arka yığının üstüne eklenir
| |
|A|
|C|
|A|
___
Ama Aüstündeki tüm parçaları (varsa) devam ettirmek ve yok etmek istiyorum . Aslında, varsayılan geri yığın davranışını seviyorum.
Bunu nasıl başarabilirim?
Beklenen: ( Adevam ettirilmeli ve üst kısımlar imha edilmelidir)
| |
| |
| |
|A|
___
Düzenleme: (A - C tarafından önerilir)
Bu benim deneme kodum:
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);
}
Ben başlattığınızda sorundur, Ave sonra B, daha sonra basın 'geri', Bçıkarılır ve Adevam ettirilir. ve 'geri' düğmesine ikinci kez basmak uygulamadan çıkmalıdır. Ama boş bir pencere gösteriyor ve kapatmak için üçüncü kez basmam gerekiyor.
Ayrıca, fırlattığımda A, sonra B, sonra C, sonra Btekrar ...
Beklenen:
| |
| |
|B|
|A|
___
Gerçek:
| |
|B|
|B|
|A|
___
Herhangi onBackPressed()bir özelleştirme ile geçersiz kılmalı mıyım yoksa bir şey mi kaçırıyorum?