Parçaların nasıl kullanılacağını öğreniyorum. Fragment
Sı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
, C
ve sonra B
, yığın şöyle görünür:
| |
|B|
|C|
|A|
___
Ve 'geri' düğmesine bastığımda B
yok edildi ve C
yeniden başlatıldı.
Ancak, parçayı A
ikinci 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: ( A
devam 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, A
ve sonra B
, daha sonra basın 'geri', B
çıkarılır ve A
devam 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 B
tekrar ...
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?