Używam ViewPager do realizacji przesuwania w mojej aplikacji na Androida. Chciałbym jednak, aby poprzedni fragment był wyświetlany, gdy użytkownik użyje przycisku Wstecz zamiast zakończenia działania. Czy istnieje jakiś sposób, aby to zrobić? Dzięki SebastianUżyj backstack z ViewPager
Odpowiedz
zastąpić funkcjonalność Activity
:
public class Activity extends Activity
{
@Override
public void onBackPressed()
{
// do stuff
myFragment.onBackPressed();
}
}
public class Fragment extends Fragment
{
public void onBackPressed()
{
// do stuff
}
}
miałem podobny problem, to jak mogę rozwiązać go. Miałem ViewPagera z 6 fragmentami i chciałem śledzić historię strony i móc korzystać z przycisku wstecz, aby nawigować wstecz w historii. Tworzę obiekt java.util.Stack<Integer>
, dodając do niego numery fragmentów (z wyjątkiem sytuacji, gdy używasz przycisku wstecz, patrz poniżej) i zastępujesz onBackPressed()
, aby uczynić go pop ostatnio oglądanym fragmentem, zamiast używać stosu wstecz, gdy mój stos historii nie jest pusty.
Chcesz uniknąć przesuwania elementów na stosie, gdy naciśniesz przycisk Wstecz, w przeciwnym razie utkniesz między dwoma fragmentami, jeśli nadal używasz przycisku Wstecz, zamiast w końcu wyjść.
Mój kod:
MyAdapter mAdapter;
ViewPager mPager;
Stack<Integer> pageHistory;
int currentPage;
boolean saveToHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.container);
mPager.setAdapter(mAdapter);
mPager.setOffscreenPageLimit(5);
pageHistory = new Stack<Integer>();
mPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
if(saveToHistory)
pageHistory.push(Integer.valueOf(currentPage));
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
saveToHistory = true;
}
@Override
public void onBackPressed() {
if(pageHistory.empty())
super.onBackPressed();
else {
saveToHistory = false;
mPager.setCurrentItem(pageHistory.pop().intValue());
saveToHistory = true;
}
};
mam ten sam problem i śledzę ten krok (Pod moją odpowiedź --- Oczywiście dla mnie pracować, dać mu spróbować)
W głównej działalności gdzie są 3 fragmenty w ViewPagerze i tworzę stos oraz dane push i pop.
private Stack<Integer> stackkk;
private ViewPager mPager;
private int tabPosition = 0;
mTabLayout.setupWithViewPager(mPager);
mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tabPosition = tab.getPosition();
mPager.setCurrentItem(tab.getPosition());
// here i have add the data into the stack in each tab click, as at first it will always be null so i add 0 position
if (stackkk.empty())
stackkk.push(0);
if (stackkk.contains(tabPosition)) {
stackkk.remove(stackkk.indexOf(tabPosition));
stackkk.push(tabPosition);
} else {
stackkk.push(tabPosition);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tabPositionUnselected = tab.getPosition();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
aw onBackPressed aktywności,
//OnbackPress i have first taken out the last one as it already and
//selected by poping it out then only set to the pager.
@Override
public void onBackPressed() {
if (stackkk.size() > 1) {
stackkk.pop();
mPager.setCurrentItem(stackkk.lastElement());
} else {
}
}
Nadzieja może pomóc lub msg mnie.
Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. –
@JaiprakashSoni dzięki za sugestię. zredagowałem swoją odpowiedź. Mam nadzieję, że to może pomóc innym –
- 1. Cykl życia zastąpionych ViewPager i BackStack?
- 2. Użyj jednego fragmentu w ViewPager wiele razy
- 3. Jak oderwać fragment z backstack
- 4. Android: Fragmenty backStack
- 5. ViewPager zagnieżdżony w ViewPager
- 6. Nawigacja fragmentów Androida i backstack
- 7. Mapy V2 z viewPager
- 8. CollapsingToolbarLayout z ViewPager
- 9. Używanie przycisku BackStack i przycisku Wstecz w przeglądarce widoku
- 10. Użyj pudełka do slajdów (jak w jonowym szkielecie) w aplikacji natywnej Android z ViewPager
- 11. Błąd z ViewPager i RecyclerView
- 12. BottomSheet z ViewPager i fragmentami?
- 13. Korzystanie Androida SlidingPaneLayout z ViewPager
- 14. Jak wymienić ViewPager z fragmentem
- 15. Określić fragment backstack stan pusty w android
- 16. Transakcje fragmentów, pasek działań i backstack
- 17. Jak wyczyścić Fragment backstack w android
- 18. ViewPager OnItemClickListener
- 19. Jak cofnąć animacje fragmentów na BackStack?
- 20. ViewPager z problemem TabLayout z AnimatedVectorDrawable
- 21. Korzystanie z ViewPager z natywnymi fragmentami
- 22. Użyj polecenia z TabItem
- 23. Użyj IValueConverter z DynamicResource?
- 24. ViewPager + FragmentStatePagerAdapter: ViewPager przestaje działać po zmianie orientacji ekranu
- 25. Wymiana ViewPager z fragmentem - następnie nawigowanie wstecz
- 26. Usuń TabIndicator z PagerTabStrip w ViewPager
- 27. Jak zaktualizować zawartość fragmentów z działania (viewpager)?
- 28. Viewpager Wyświetlenie pamięci z widokiem przeglądarki
- 29. Zagnieżdżone karty paska akcji (z ViewPager)
- 30. NullPointerException na ViewPager z widokiem Recycler
idealne, wielkie dzięki! – Sebastian