java - Android - 查看寻呼机返回功能在前两个选项卡中不起作用
问题描述
我在活动中使用了带有选项卡布局的 viewpager。It has 3 tabs, The issue is when selected tabs 1&2 back button is not working, and it's not able to go to the previous activity. 而且,在第三个选项卡中,后退按钮正在工作,我可以访问上一个活动。
我在 onBack 函数中给出了完成代码。然后它也不会进入上一个活动。
下面的代码描述了我如何在我的活动中设置 viewpager 和 tablayout。告诉我如何设置 Tab 1 和 Tab 2 的后退按钮。
class MainActivity
{
TabLayout.Tab firsttab = tabs.newTab();
firsttab.setText("Personal Details");
tabs.addTab(firsttab);
TabLayout.Tab secondtab = tabs.newTab();
secondtab.setText("Employment");
tabs.addTab(secondtab);
TabLayout.Tab thirdtab = tabs.newTab();
thirdtab.setText("Documents");
tabs.addTab(thirdtab);
Servicepageadapter adapter = new Servicepageadapter(getSupportFragmentManager(),tabs.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs));
tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tapposition = tab.getPosition();
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
private class Servicepageadapter extends FragmentPagerAdapter {
int mNumOfTabs ;
public Servicepageadapter(FragmentManager fragmentManager, int tabCount) {
super(fragmentManager);
this.mNumOfTabs = tabCount;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
boolean isbackstack = true;
PersonalFragment tab1 = new PersonalFragment().newInstance("", "","");
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (!isbackstack) {
transaction.addToBackStack(null);
}
transaction.commit();
return tab1;
case 1:
boolean isbackstack1 = true;
EmploymentFragment tab2 = new EmploymentFragment().newInstance("", "","");
FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();
if (!isbackstack1) {
transaction1.addToBackStack(null);
}
transaction1.commit();
return tab2;
case 2:
boolean isbackstack2 = true;
DocumentsFragment tab3 = new DocumentsFragment().newInstance("", "","");
FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
if (!isbackstack2) {
transaction2.addToBackStack(null);
}
transaction2.commit();
return tab3;
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
}
解决方案
问题是您正在执行FragmentTransaction
s in getItem
。你不应该这样做:getItem
只应该创建和返回Fragment
,并让FragmentPagerAdapter
自己处理其余的。
如果您想要默认的返回功能(将Activity
/ 保留到上一个Activity
),您可以简单地删除所有与事务相关的代码。如果您想要更多自定义功能(例如更改选项卡),那么您可以使用OnBackPressedDispatcher
自定义它。
推荐阅读
- php - 如何使用 PHP 和 MYSQL 在表中插入多行?
- sql - Dtd 或 Xsd Sql 定义
- batch-file - 使用包含 10,000 个项目的列表时批处理文件崩溃
- node.js - How to read an image and text at the same time in Loopback/NodeJs
- ios - 如何在 UIPageControl 中使用自定义视图而不是默认点
- javascript - Gauge chart, how to decrease width of serie?
- python - Error while fetching data from PostgreSQL tuple indices must be integers or slices, not str
- c++ - How to delete an entry in SQLite ORM with a composite key
- python - Printing of exception subclasses is not a tuple of arguments
- javascript - 不创建表