Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 标签碎片是';t重新加载后显示_Android - Fatal编程技术网

Android 标签碎片是';t重新加载后显示

Android 标签碎片是';t重新加载后显示,android,Android,我正在创建一个带有查看寻呼机和选项卡的应用程序: 第一次单击底部导航中的“菜单”项时,通过单击选项卡并滑动(viewpager),文本frag1、frag2和frag3将按预期显示在屏幕上 见下图: 但当我点击另一个项目(如主页)并返回“菜单”项目时,文本框1等不会显示。见下图: 带viewpageradapter的菜单片段: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bun

我正在创建一个带有查看寻呼机和选项卡的应用程序:

第一次单击底部导航中的“菜单”项时,通过单击选项卡并滑动(viewpager),文本frag1、frag2和frag3将按预期显示在屏幕上

见下图:

但当我点击另一个项目(如主页)并返回“菜单”项目时,文本框1等不会显示。见下图:

带viewpageradapter的菜单片段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_menu, container, false);
    setHasOptionsMenu(true);
    ButterKnife.bind(this, view);

    FragmentManager fragManager = myContext.getSupportFragmentManager();
    viewPagerAdapter = new ViewPagerAdapter(fragManager);

    viewPagerAdapter.addFragment(new MenuRecyclerViewFragment(), "FRAG1"); // `new MenuRecyclerViewFragment()` should be inside `FragmentPagerAdapter.getItem()`
    viewPagerAdapter.addFragment(new MenuRecyclerViewFragment(), "FRAG2"); // `new MenuRecyclerViewFragment()` should be inside `FragmentPagerAdapter.getItem()`
    viewPagerAdapter.addFragment(new MenuRecyclerViewFragment(), "FRAG3"); // `new MenuRecyclerViewFragment()` should be inside `FragmentPagerAdapter.getItem()`

    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);

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

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @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) {

        }
    });

    return view;

}

class ViewPagerAdapter extends FragmentPagerAdapter {
    public final List<Fragment> mFragmentList = new ArrayList<>(); // this line can cause crashes
    public final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = mFragmentList.get(position);
        Bundle bundle = new Bundle();
        bundle.putString("text", mFragmentTitleList.get(position));
        fragment.setArguments(bundle);
        return fragment;
    }

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

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);  // this line can cause crashes
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

您的ViewPagerAdapter类需要通过FragmentStatePagerAdapter而不是FragmentPagerAdapter进行扩展。
查看FragmentStatePagerAdapter的更多详细信息。

第二次访问此片段时,getArguments()不再为null。 请改用savedInstanceState捆绑包。

1。)由ViewPager承载的片段应由
FragmentPagerAdapter.getItem()创建

2.)片段(托管片段)内的viewPager应提供
getChildFragmentManager()
,而不是
context.getSupportFragmentManager()
,以使其正常工作

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

    View view = inflater.inflate(R.layout.fragment_menu_recycler_view, container, false);
    ButterKnife.bind(this, view);

    Bundle bundle = this.getArguments();
    if (bundle != null) {
        String value = bundle.getString("text", "test");
        textView.setText(value);
    }


    return view;
}
public class ViewPagerAdapter extends FragmentPagerAdapter {
    public ViewPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0) return new MenuRecyclerViewFragment();
        if(position == 1) return new MenuRecyclerViewFragment();
        if(position == 2) return new MenuRecyclerViewFragment();

        throw new IllegalStateException("Unexpected position " + position);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0) return "FRAG1";
        if(position == 1) return "FRAG2";
        if(position == 2) return "FRAG3";
      
        throw new IllegalStateException("Unexpected position " + position);
    }
}