【问题标题】:Options menu showing at different fragments(mostly in neighbour Fragment)选项菜单显示在不同的片段中(主要在相邻片段中)
【发布时间】:2016-07-12 11:41:54
【问题描述】:

我的视图寻呼机的适配器是这样的:

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

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new frag1();
            case 1:
                return new frag2();
            case 2:
                return new frag1();
            case 3:
                return new frag2();
            case 4:
                return new frag1();
            default:
                return null;
        }
    }

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

我如何在 java 类中设置 tablayout 和 viewpager:

 for (int i = 0; i < 5; i++) {
            tabLayout.addTab(tabLayout.newTab());
        }

    Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.beginFakeDrag();
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

我收到如下奇怪的错误:

 W/FragmentManager: moveToState: Fragment state for frag2{2428405 #1 id=0x7f0c006a} not updated inline; expected state 3 found 2

那么我该如何解决这个问题呢? 我从堆栈中得到答案,但它不能解决我的问题, 所以有人对此有任何了解,请帮助我!

【问题讨论】:

标签: android android-fragments android-optionsmenu fragmentmanager


【解决方案1】:

将此行viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 替换为tabLayout.setTabsFromPagerAdapter(adapter);

【讨论】:

  • 首先我使用了这个方法,然后我从堆栈中更改了 addOnPageChangeListener。 :) @Manish
  • 好的..我将分享我的代码。我正在做同样的事情。因为您的 xml 将包含 TabLayout 和 ViewPager
【解决方案2】:

尝试将tabLayoutviewPagertabLayout.setupWithViewPager(viewPager) 连接起来,而不是在循环中手动添加选项卡。

【讨论】:

    【解决方案3】:

    available_bus_fragment.xml

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabGravity="fill"
        android:background="#d4d4d4"
        app:tabMode="fixed" />
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#e8e8e8"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
    

    ViewPagerAdapter.java 是 ViewPager 的适配器。

    public class ViewPagerAdapter extends FragmentStatePagerAdapter  {
    
    
    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }
    
    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
    
    @Override
    public int getCount() {
        return 3;
    }
    
    
    @Override
    public CharSequence getPageTitle(int position) {
        return  String.valueOf(position);
    }
    
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                Fragment tab1 = new YourFragment1();
                return tab1;
            case 1:
                Fragment tab2 = new YourFragment1();
                return tab2;
            case 2:
                Fragment tab3 = new YourFragment1();
                return tab3;
        }
        return null;
    }}
    

    这是你设置 Viewpager 适配器的类。

    public class MyFragment extends Fragment {
    View rootView;
    ViewPagerAdapter adapter;
    TabLayout tabLayout;
    ViewPager viewPager;
    private int[] tabIcons = {
            R.drawable.tabclock,
            R.drawable.clock,
            R.drawable.tab_rupee
    };
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView = getLayoutInflater(savedInstanceState).inflate(R.layout.available_bus_fragment, null);
        tabLayout = (TabLayout) rootView.findViewById(R.id.tabs);
    
    
        viewPager = (ViewPager) rootView.findViewById(R.id.viewpager);
        adapter = new ViewPagerAdapter(getChildFragmentManager());
    
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setTabsFromPagerAdapter(adapter);
        setupTabIcons();
    
        return rootView;
    }
    
    private void setupTabIcons() {
        tabLayout.getTabAt(0).setIcon(tabIcons[0]).setTag("Departure").setText("Departure");
        tabLayout.getTabAt(1).setIcon(tabIcons[1]).setTag("Duration").setText("Duration");
        tabLayout.getTabAt(2).setIcon(tabIcons[2]).setTag("Price").setText("Price");
    } }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多