Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android TabLayout ViewPager不在backstack上膨胀标签片段大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个标签视图设置,使用viewpager为每个标签设置自定义片段.这是我的代码

@H_419_8@

拿着片段@H_419_8@

@H_419_8@

public class FragIn@L_813_9@mainView extends Fragment implements CGFragment {
    private CGController controller;
    private CGFragment thisFragment;

    @Bind(R.id.inBoxViewPager)ViewPager inBoxViewPager;
    @Bind(R.id.inBoxTabs)TabLayout inBoxTabLayout;
    @Bind(R.id.inBox_progress_wheel)ProgressWheel inBoxProgressWheel;

    public FragIn@L_813_9@mainView(){}

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

        View rootView = inflater.inflate(R.layout.fragment_inBox_mainview,container,falsE);
        ButterKnife.bind(this,rootView);
        thisFragment = this;
        Globals g = Globals.geTinstance();
        /** Show loading spinner */
        this.inBoxProgressWheel.setBarColor(ContextCompat.getColor(controller.getContext(),g.getUserObject().getUserThemeColor()));
        this.inBoxProgressWheel.setVisibility(View.VISIBLE);
        /** Display the profile information based off the ID */
        controller.displayInBox(thisFragment);

        return rootView;
    }


    public void hideProgressSpinner() {
        this.inBoxProgressWheel.setVisibility(View.GONE);
    }


    public ViewPager geTinBoxViewPager() {
        return this.inBoxViewPager;
    }

    public TabLayout geTinBoxTabLayout() {
        return this.inBoxTabLayout;
    }
}

它的布局文件@H_419_8@

@H_419_8@

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://scheR_859_11845@as.android.com/apk/res/android"
              xmlns:app="http://scheR_859_11845@as.android.com/apk/res-auto"
              xmlns:wheel="http://scheR_859_11845@as.android.com/apk/res-auto"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">
    <android.support.design.widget.TabLayout
        android:id="@+id/inBoxTabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="scrollable" />
    <com.pnikosis.materialishprogress.ProgressWheel
        android:id="@+id/inBox_progress_wheel"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center"
        wheel:matProg_barColor="#5588FF"
        wheel:matProg_progressIndeterminate="true"
        android:visibility="gone"/>


    <android.support.v4.view.ViewPager
        android:id="@+id/inBoxViewPager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:BACkground="@android:color/white" />
</LinearLayout>

标签片段及其通胀文件@H_419_8@

@H_419_8@

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    android:id="@+id/main_content"
    xmlns:android="http://scheR_859_11845@as.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.baoyz.widget.PullrefreshLayout
        android:id="@+id/tabPullrefresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <view
        android:id="@+id/tabRecyclerHolder"
        class="android.support.v7.widget.RecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:cli@R_673_10866@adding="false"
        android:layout_centerInParent="true"/>

    </com.baoyz.widget.PullrefreshLayout>
    <com.melnykov.fab.FloaTingActionButton
        android:id="@+id/tabFab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        android:src="@mipmap/ic_add_white"/>
</android.support.design.widget.CoordinatorLayout>

public class TabRecyclerHolder extends Fragment {

    @Bind(R.id.tabRecyclerHolder) RecyclerView tabRecyclerHolder;
    @Bind(R.id.tabPullrefresh) PullrefreshLayout tabPullrefresh;
    @Bind(R.id.tabFab) FloaTingActionButton recyclerFab;

    private String tabtitle = "title";


    public TabRecyclerHolder(){}

    @Override
    public View onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE) {

        View rootView = inflater.inflate(R.layout.tab_recycler_holder,falsE);

        ButterKnife.bind(this,rootView);

        recyclerFab.hide(false);

        tabPullrefresh.setrefreshStyle(PullrefreshLayout.STYLE_MATERIAL);

        return rootView;
    }

    public RecyclerView getTabRecyclerHolder() {
        return this.tabRecyclerHolder;
    }

    public FloaTingActionButton getRecyclerFab() {
        return this.recyclerFab;
    }

    public String getTabtitle() {
        return this.tabtitle;
    }

    public void setTabtitle(String titlE) {
        this.tabtitle = title;
    }

    public PullrefreshLayout getTabPullrefresh() {
        return this.tabPullrefresh;
    }
}

我的标签适配器@H_419_8@

@H_419_8@

public class TabPagerAdapter extends FragmentStatePagerAdapter {

    private CGController controller;
    private List<Object> items;

    public TabPagerAdapter(FragmentManager fm,CGController controller,List<Object> items) {
        super(fm);
        this.controller = controller;
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Fragment getItem(int num) {
        return (TabRecyclerHolder)items.get(num);
    }

    @Override
    public String getPagetitle(int num){
        return ((TabRecyclerHolder)items.get(num)).getTabtitle();
    }
}

处理代码@H_419_8@

@H_419_8@

public void viewInBox() {
    /** Set up the views */
    receivedHolder = new TabRecyclerHolder();
    receivedHolder.setTabtitle(Constants.TAB_INBox_RECEIVED);
    sentHolder = new TabRecyclerHolder();
    sentHolder.setTabtitle(Constants.TAB_INBox_SENT);

    tabs.add(receivedHolder);
    tabs.add(sentHolder);

    /** Set up the tabs */
    final ViewPager inBoxViewPager = inBoxFragment.geTinBoxViewPager();
    TabLayout inBoxTabLayout = inBoxFragment.geTinBoxTabLayout();

    /** Set the adapter for the view pager */
    inBoxViewPager.setAdapter(new TabPagerAdapter(inBoxFragment.getChildFragmentManager(),controller,tabs));
    /** set up the tab look and feel */
    inBoxTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    inBoxTabLayout.setTabMode(TabLayout.MODE_FIXED);

    inBoxViewPager.setOffscreenPageLimit(3);
    inBoxViewPager.addOnPagechangelistener(new TabLayout.TabLayoutOnPagechangelistener(inBoxTabLayout));
    inBoxTabLayout.setOnTabSELEctedListener(new TabLayout.onTabSELEctedListener() {
        @Override
        public void onTabSELEcted(TabLayout.Tab tab) {
            inBoxViewPager.setCurrentItem(tab.getPosition());
        }

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

        }

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

        }
    });

    /** And,display! */
    inBoxTabLayout.setupWithViewPager(inBoxViewPager);

    receivedAdapter = new Recyclerlistadapter(controller,items);
    final RecyclerView receivedList = receivedHolder.getTabRecyclerHolder();
    receivedList.setLayoutManager(new linearlayoutmanager(controller.getContext()));
    receivedList.setAdapter(receivedAdapter);
}

我错过了一些代码,但它与问题无关.@H_874_27@最初查看片段时,代码可以正常工作.但是,由于我的应用程序包含单个活动,并且只是替换导航到的每个片段的内容视图,因此每个片段都会添加到后端堆栈,然后在按下后退按钮时弹出.我的问题是,当导航回到此片段时,选项卡内的视图不会被充气,这意味着无法访问任何元素(因此应用程序在尝试在recyclerview中显示数据时崩溃等).@H_419_8@

我看过这个问题:TabLayout ViewPager Not Loading When Using Backstack并实现了它的建议(在设置寻呼机适配器时使用getChildFragmentManager())但是这并没有解决我的问题.@H_419_8@

帮助将不胜感激!@H_419_8@

解决方法

更改此公共视图onCreateView(LayoutInflater inflater,… to public void onViewCreated(View view,Bundle savedInstanceStatE)

@H_419_8@

所以你会有这样的事情@H_419_8@

@H_419_8@

@Override
public View onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE) {        
    return inflater.inflate(R.layout.tab_recycler_holder,falsE);
}

然后@H_419_8@

@H_419_8@

@Override
public void onViewCreated (View view,Bundle savedInstanceStatE){
     ButterKnife.bind(this,view);
    recyclerFab.hide(false);
    tabPullrefresh.setrefreshStyle(PullrefreshLayout.STYLE_MATERIAL);
    ...

看看它是否有帮助@H_419_8@

大佬总结

以上是大佬教程为你收集整理的Android TabLayout ViewPager不在backstack上膨胀标签片段全部内容,希望文章能够帮你解决Android TabLayout ViewPager不在backstack上膨胀标签片段所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。