【问题标题】:getItem() run twice when FragmentPagerAdapter called in ViewPager and TabLayout在 ViewPager 和 TabLayout 中调用 FragmentPagerAdapter 时 getItem() 运行两次
【发布时间】:2017-11-20 18:01:58
【问题描述】:

这是我的Dashboard_adapt 适配器类。

public class Dashboard_adapt extends FragmentStatePagerAdapter {
    Context context;
    ArrayList<Fragment> fragments = new ArrayList<>();


    public Dashboard_adapt(FragmentManager fm, Context context) {
        super(fm);
        this.context = context;
        setFragments();
    }
    private void setFragments(){
        fragments.add(new Home_dashboard());
        fragments.add(new Search_dashboard());
        fragments.add(new Add_dashboard());
        fragments.add(new Favourite_dashboard());
        fragments.add(new User_dashboard());
    }


    @Override
    public int getItemPosition(Object object) {
        return PagerAdapter.POSITION_NONE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        if (object != null) {
            return ((Fragment) object).getView() == view;
        } else {
            return false;
        }
    }

    @Override
    public Fragment getItem(int position) {
        Toast.makeText(context, "" + position, Toast.LENGTH_SHORT).show();
        return fragments.get(position);
    }

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

这是 ViewPager 和 TabLayout 的 MainActivity。

    public class Dashboard extends AppCompatActivity {
private FragmentManager fm = null;

 private int[] ImageViar = {
            R.drawable.home_dash,
            R.drawable.ic_search_black_24dp,
            R.drawable.plus,
            R.drawable.heart,
            R.drawable.user_dash
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);
        ((AppCompatActivity) this).getSupportActionBar().hide();
        fm = getSupportFragmentManager();
        final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_dash);
        final ViewPager viewPager = (ViewPager) findViewById(R.id.fragment_changer_dashboard);
        Dashboard_adapt adapter = new Dashboard_adapt(fm, this);

        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
        setupTabIcons(tabLayout);
 }

Adapter 类在第一次返回两个 Toast.. 并且每次下一个 Fragment 类将在 ViewPager 中打开。

【问题讨论】:

标签: android android-fragments android-viewpager android-tablayout fragmentpageradapter


【解决方案1】:

这是 ViewPager 的默认行为。 ViewPager 还加载“屏幕外”页面以优化滑动手势...... 您可能会看到位置 = 0 和 1 的祝酒词。 查看setOffscreenPageLimit方法...控制“页数”

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
相关资源
最近更新 更多