gpt4 book ai didi

android - 在 viewpager 中使用 backstack 和 back 按钮

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:42 25 4
gpt4 key购买 nike

我正在使用 viewpager 在 fragment 之间滑动,并希望后退按钮导航到之前查看的 fragment 而不是结束 Activity 。抱歉,如果这是 this question 的副本但是我没有发现答案很有帮助。显然 onBackPressed 需要被覆盖,但我不知道如何获取和显示正确的 fragment 。我假设我应该使用 fragmentmanager 的后台堆栈,但 getSupportFragmentManager().getBackStackEntryCount() 总是返回 0。我需要使用 FragmentTransaction.addToBackStack() ?如果是这样,我应该在我的适配器中的什么地方添加它?

这是我的 Activity 代码,

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();
}
}


}

最佳答案

在新的设计支持库中,我使用这个
我有同样的问题,我按照这一步

在 viewpager 中有 3 个 fragment 的主要 Activity 中,我创建了堆栈并推送和弹出数据。

//private Stack<Integer> stackkk;  ==> As i get edit suggestion 
private Stack<Integer> stackkk = new Stack<>(); // Edited
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());

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) {
}
});
}

并且在 onBackPressed Activity 中,

@Override
public void onBackPressed() {
if (stackkk.size() > 1) {
stackkk.pop();
mPager.setCurrentItem(stackkk.lastElement());
} else {
}
}

关于android - 在 viewpager 中使用 backstack 和 back 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18453275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com