简体   繁体   English

在Android <= 4.2中,ViewPager findViewById为null

[英]ViewPager findViewById is null in Android <= 4.2

I use a ViewPager to have swipe tabs in my app. 我使用ViewPager在我的应用程序中具有滑动选项卡。 It works in Android versions above 4.2, but crashes in versions >= 4.0 and <= 4.2. 它适用于4.2以上的Android版本,但在> = 4.0和<= 4.2的版本中崩溃。

I get a null pointer exception when I call setAdapter on the view pager and that's because it turns out the view pager is null after findViewById. 当我在视图分页器上调用setAdapter时,会得到一个空指针异常,这是因为事实证明,在findViewById之后,视图分页器为null。 It works fine in Android versions > 4.2. 在Android版本> 4.2中可以正常工作。 I can't figure out what the issue is with other Android versions. 我无法弄清楚其他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 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>

Adapter 适配器

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);
    }
}

Probably ViewPager is not load correctly in the layout. 可能ViewPager没有在布局中正确加载。 Check it in the logcat. 在logcat中检查它。

try 尝试

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

since you get null ViewPager, new ViewPager(this) can make sure the problem is not related to the Class of ViewPager . 由于获取的ViewPager为空,因此new ViewPager(this)可以确保问题与ViewPager的类ViewPager

LinearLayout linearlayout = (LinearLayout)findViewById(R.id.profile_list_container); helps you make sure your activity is "connected" to the correct layout. 帮助您确保您的活动“连接”到正确的布局。

after you have initialized the ViewPager, remember to set the layoutParam, including width/height...etc 初始化ViewPager后,请记住设置layoutParam,包括width / height ... etc

Oh wow, I figured it out. 哦,我知道了。 It was using a totally different layout for tablets. 它使用的平板电脑布局完全不同。 I had used the default master/detail template from Android Studio and had forgotten to update the layout for tablets, which explains why my views could not be found. 我使用了Android Studio中的默认主模板/明细模板,却忘记了更新平板电脑的布局,这解释了为什么找不到我的视图。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM