【问题标题】:Can getActivity return null when using a viewpager?使用 viewpager 时 getActivity 可以返回 null 吗?
【发布时间】:2019-02-16 21:14:41
【问题描述】:

我收到一个 lint 警告,说 getActivity 可能返回 null,所以我想知道 getActivity 什么时候可能返回 null,这将是一个问题,因为我使用 getActivity 作为上下文。

我在其他帖子中阅读过使用已弃用的 onAttach,那么获取上下文或确保 getActivity() 不会返回 null 的最佳方法是什么?

我还在使用带有片段的 viewPager,因此片段被附加到 Activity 权限,所以通常它不会返回 null?

  public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

    private int numOfTabs;

    SectionsPagerAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this.numOfTabs = numOfTabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                Log.i(TAG, "Fragment Pos: "+ position);
                return new Tab1();
            case 1:
                Log.i(TAG, "Fragment Pos: "+ position);
                return new Tab2();
            case 2:
                Log.i(TAG, "Fragment Pos: "+ position);
                return new Tab3();
            case 3:
                Log.i(TAG, "Fragment Pos: "+ position);
                return new Tab4();
            case 4:
                Log.i(TAG, "Fragment Pos: "+ position);
                return new Tab5();
            case 5:
                Log.i(TAG, "Fragment Pos: "+ position);
                return new Tab6();
                default:
                    return null;
        }
    }

    @Override
    public int getCount() {
        // Get total pages
        return numOfTabs;
    }
}

setupViewPager() 方法:

mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());

    // Set up the ViewPager with the sections adapter
    mViewPager = findViewById(R.id.viewPager);

    mViewPager.setAdapter(mSectionsPagerAdapter);

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

【问题讨论】:

    标签: java android android-fragments android-viewpager


    【解决方案1】:
    1. 你总是可以使用视图本身的上下文viewPager.getContext()

    2. 可以使用getActivity(),只要你确定在那个时候活动不会为空,例如onActivityCreated

    如果您想摆脱 lint 警告,只需对 getActivity var 进行空检查即可。

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 1970-01-01
      • 2014-02-21
      • 2012-07-25
      • 2013-12-29
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多