Parçalar arasında geçiş yapmak için bir görüntüleyici kullanıyorum ve geri düğmesinin, etkinliği sonlandırmak yerine önceden görüntülenen parçaya gitmesini istiyorum. Üzgünüz, bu bir this question kopyasıysa, ancak cevabı çok yardımcı bulmuyorum. Açıkçası, BackBackPressed öğesinin geçersiz kılınması gerekiyor, ancak doğru parçayı nasıl alacağımı ve görüntüleyeceğimi bilmiyorum. Fragmentmanager'ın backstack'ını kullanmam gerektiğini varsayalım, fakat getSupportFragmentManager().getBackStackEntryCount()
her zaman 0 değerini döndürür. FragmentTransaction.addToBackStack()
'u kullanarak arka tarafa parçaları elle eklemem gerekir mi? Eğer öyleyse, bunu adaptörüme nereye eklerim? İşte Vizördeki arka tarafa ve arkadan düğmeyi kullanma
public class PagerActivity extends FragmentActivity {
ArrayList<Sale> sales;
MyAdapter mAdapter;
ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent it = getIntent();
this.sales = (ArrayList<Sale>) it.getExtras().get("sales");
int position = it.getExtras().getInt("position");
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.fragment_pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(position);
}
public class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public int getCount() {
return sales.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
@Override
public Fragment getItem(int position) {
SalesThumbFragment frag = new SalesThumbFragment();
return frag.newInstance(sales.get(position));
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.sales_controller, menu);
return true;
}
@Override
public void onBackPressed() {
if(getSupportFragmentManager().getBackStackEntryCount() != 0) {
getSupportFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
}
Kullanıcılar ikinci yönde çalışmayacak şekilde her iki yönde de gezinebilirler. Ben sadece bir 'OnPageChangeListener' ekleyerek ve indeksleri orada kaydederek ilk çözümü denedim ama davranış tutarsız. Bazen, görüntülenen sayfa, bir sonraki parçanın örneklendirildiğini görebildiğim halde değişmeyecekti. – Igd
Ayrıca, endeksleri manuel olarak izlemek, bu amaç için zaten mevcut olan güzel bir 'un-android' çözümü gibi hissettiriyor – Igd
Hmm, neden bu tutarsızlık olduğundan emin değilim, ancak ViewPager'ı not etmek önemlidir aslında her zaman bellekte 3 sayfa tutulur: geçerli sayfa, önceki sayfa ve sonraki sayfa. Bu nedenle, şu anda 2. sayfada (sayfa 1, 2 ve 3 şu anda örnekleniyor) ve sonra sayfa 3'e geçin, örneğin, sayfa 4 başlatılacak ve sayfa 1 kaldırılacak. –