[英]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.