【问题标题】:ViewPager findViewById is null in Android <= 4.2ViewPager findViewById 在 Android <= 4.2 中为空
【发布时间】:2014-07-19 00:55:25
【问题描述】:

我使用 ViewPager 在我的应用程序中添加滑动标签。它适用于 4.2 以上的 Android 版本,但在 >= 4.0 和

当我在视图寻呼机上调用 setAdapter 时出现空指针异常,这是因为在 findViewById 之后视图寻呼机为空。它在 Android 版本 > 4.2 中运行良好。我无法弄清楚其他 Android 版本的问题是什么。

public class MainActivity extends FragmentActivity {

    ViewPager mViewPager;
    TabsPagerAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);

        mViewPager = (ViewPager) findViewById(R.id.main_view_pager);
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mAdapter);
    }
}

R.layout.activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:id="@+id/profile_list_container">

    <android.support.v4.view.ViewPager
        android:id="@+id/main_view_pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </android.support.v4.view.ViewPager>

</LinearLayout>

适配器

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {

        switch (position) {

            case 0:
                return new ProfileListFragment();
            case 1:
                return new BoostFragment();
            case 2:
                return new StatsFragment();

        }
        return null;
    }

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }
}

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    可能 ViewPager 没有在布局中正确加载。在 logcat 中检查。

    【讨论】:

    • 您能否提供更清晰的说明?在布局中正确加载是什么意思?当使用 Crashlytics 发生崩溃时,我记录 mViewPager 是什么,它说它为空。崩溃仅发生在 Android
    【解决方案2】:

    试试

    mViewPager = new ViewPager(this);
    linearlayout.addView (mViewPager);
    

    因为你得到 null ViewPager, new ViewPager(this) 可以确保问题与ViewPager 的类无关。

    LinearLayout linearlayout = (LinearLayout)findViewById(R.id.profile_list_container); 帮助您确保您的活动“连接”到正确的布局。

    初始化好ViewPager后,记得设置layoutParam,包括width/height...等

    【讨论】:

    • 既然你得到空的ViewPager,new ViewPager(this)可以确定问题与ViewPager的类无关。 LinearLayout li = (LinearLayout)findViewById(R.id.profile_list_container); 帮助您确保您的活动“连接”到正确的布局。初始化好ViewPager后,记得设置layoutParam,包括width/height...等
    • 把它放在你的答案中:)
    • 这真的很奇怪。我刚试过,现在线性布局得到一个空点异常。似乎 findViewById 找不到任何视图。我什至尝试首先使用 ViewGroup rootView = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content) 获取 rootView。这可行,但 (LinearLayout) rootView.findViewById(R.id.profile_list_container) 返回 null。
    • 因此,如果您知道问题与ViewPager 无关,请尝试删除与 ViewPager 相关的代码,然后再对此问题进行任何其他假设。更重要的是,尝试在 Eclipse 中清理您的项目(Project - Clean)。
    【解决方案3】:

    哦,哇,我想通了。它为平板电脑使用了完全不同的布局。我使用了 Android Studio 中的默认主/详细信息模板,但忘记更新平板电脑的布局,这解释了为什么找不到我的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2022-01-19
      • 2014-12-23
      • 1970-01-01
      相关资源
      最近更新 更多