ViewPagerでバックスタックを使用してください
-
13-12-2019 - |
質問
私は私のAndroidアプリでスワイプを実装するためにviewPagerを使用しています。ただし、アクティビティを終了する代わりに、ユーザーが戻りボタンを使用しているときに、前のフラグメントを表示したいと思います。それをする方法はありますか? 感謝します セバスチャン
解決
Activity
の機能を上書きします。
public class Activity extends Activity
{
@Override
public void onBackPressed()
{
// do stuff
myFragment.onBackPressed();
}
}
public class Fragment extends Fragment
{
public void onBackPressed()
{
// do stuff
}
}
. 他のヒント
私は同様の問題を抱えていました、これは私がそれを解決する方法です。私は6つの断片を持つ視力を持っていて、ページ履歴を追跡し、戻るボタンを使って歴史の中で後方を移動することができるようにしたかったです。私はjava.util.Stack<Integer>
オブジェクトを作成し、フラグメント番号をそれに追加します(下記を参照してください)。
戻るボタンを押すと、スタック上の要素を押すことを避けたい場合は、最終的に終了するのではなく、戻るボタンを使用し続けている場合は、2つのフラグメント間に固定されます。
私のコード:
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;
}
};
. フラグメント活動の下の方法の上記の方法はあなたの問題を解決するべきです。
@Override
public void onBackPressed() {
if (mViewPager.getCurrentItem() == 0) {
// If the user is currently looking at the first step, allow the system to handle the
// Back button. This calls finish() on this activity and pops the back stack.
super.onBackPressed();
} else {
// Otherwise, select the previous step.
mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1);
}
}
. 私は同じ問題を持っていて、このステップに従ってください(編集した私の答えを編集 - 確かに私のために働き、試してみる)
ViewPagerに3つのフラグメントがあるメインアクティビティでスタックを作成します そして、データを押して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) {
}
});
}
.
およびアクティビティのオンバックプレゼンテッドで、
//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 {
}
}
.
これが私を助けるかMSGを願っています。
所属していません StackOverflow