OnBackpressed在tablayout上获取空视图

Chi*_*ayu 5 android android-adapter android-fragments android-viewpager android-tablayout

嘿伙计们请调查此事.我坚持解决这个问题.

我使用TabLayout和设置了片段标签ViewPager.问题是当我移动到下一个片段然后我按下后退按钮我得到空标签视图.

在这里我附上我的代码.

这是我的家庭片段,当我点击衬衫时,它将我移动到下一个片段

正如我所说,之前的片段让我感动这个产品细节片段. 现在,当我按下后退按钮时,它给我空视图

正如我所说,它给了我这个空洞的看法

home.xml

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">


    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:tabIndicatorColor="@android:color/white"
        app:tabIndicatorHeight="4dp" />

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" />

    </LinearLayout>`
Run Code Online (Sandbox Code Playgroud)

home.java(片段)

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.home, container, false);

    ((Drawer) getActivity()).setActionBarTitle("Home");

    Toast.makeText(getActivity(), "entry count" +    getActivity().getSupportFragmentManager().getBackStackEntryCount(), Toast.LENGTH_SHORT).show();


    tabLayout = (TabLayout) view.findViewById(R.id.tabLayout);

    tabLayout.addTab(tabLayout.newTab().setText("Products"));

    tabLayout.addTab(tabLayout.newTab().setText("Category"));

    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);


    viewPager = (ViewPager) view.findViewById(R.id.pager);
    Pager adapter = new Pager(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
   tabLayout.getTabCount());

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    viewPager.setAdapter(adapter);

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(this);
    return view;

}

@Override
public void onTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
Run Code Online (Sandbox Code Playgroud)

pager.java(适配器)

public class Pager extends FragmentStatePagerAdapter {

int tabCount;

public Pager(FragmentManager fm, int tabCount) {
    super(fm);
    this.tabCount = tabCount;
}

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            Product tab1 = new Product();
            return tab1;
        case 1:
            Category tab2 = new Category();
            return tab2;
        default:
            return null;
    }
}

@Override
public int getCount() {
    return tabCount;
}
}
Run Code Online (Sandbox Code Playgroud)

MainActivity(我设置此选项卡片段的位置)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drawer);


    getSupportActionBar().setTitle("Home");
    fragment = new home();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.main, fragment);
    ft.commit();
Run Code Online (Sandbox Code Playgroud)

ND1*_*10_ 11

更换时我遇到了同样的问题fragment而且更换fragmentTabLayout(即Inner Fragments)

在研究了这个问题之后:我找到了解决方案

我做了什么:

更换

 ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
Run Code Online (Sandbox Code Playgroud)

如果您的父母Activity正在扩展AppCompatActivity,那么请使用

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
Run Code Online (Sandbox Code Playgroud)

如果您的父活动扩展而Activity不是使用

ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getChildFragmentManager());
Run Code Online (Sandbox Code Playgroud)


Vis*_*a ツ 0

在活动中编写代码

 @Override
    public void onBackPressed() {

            try {
                if (getFragmentManager().getBackStackEntryCount() > 1) {
                    FragmentManager.BackStackEntry first = getFragmentManager().getBackStackEntryAt(0);
                    getFragmentManager().popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    onNavigationItemSelected(navigationView.getMenu().getItem(0));
                } else
                    finish();

            } catch (Exception e) {
                e.printStackTrace();
            }

    }
Run Code Online (Sandbox Code Playgroud)