我正在尝试实现ViewPager以在一个活动中组合两个视图,当我尝试在膨胀视图中使用findViewById访问项目时我面临NullPointerException,我的自定义页面适配器如下,
public class CustomPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return 2;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
@Override
public void destroyItem(View view, int value, Object object) {
((ViewPager) view).removeView((View) object);
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public Object instantiateItem(View collection, int position) {
LayoutInflater layoutInflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int resultId = 0;
switch (position) {
case 1:
resultId = R.layout.layout2;
break;
case 0:
default:
resultId = R.layout.layout1;
break;
}
View view = layoutInflater.inflate(resultId, null);
((ViewPager) collection).addView(view, 0);
return view;
}
}
我的活动如下,其中我正在尝试访问layout1内部的按钮,该按钮抛出空值。
public class PageSwiperActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpagerlayout);
Button myButton=(Button) findViewById(R.id.myButton);
}
}
我的viewpagerlayout.xml仅包含
<android.support.v4.view.ViewPager
android:id="@+id/viewPagerLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
我的layout1.xml包含一个按钮。给我一些指导。
感谢。
答案 0 :(得分:4)
您是否已将PageAdapter
设为ViewPager
?
如果您未设置它,请删除包含按钮的行并将此代码添加到您的活动中:
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPagerLayout);
viewPager.setAdapter(new CustomPagerAdapter());
而不是
Button myButton = (Button) findViewById(R.id.myButton);
您可以拨打findViewById
来获取适配器的此方法中的按钮:
@Override
public Object instantiateItem(View collection, int position) {
... // your previous code
final Button myButton = (Button) findViewById(R.id.myButton);
return view;
}
填充包含此按钮的布局后。
答案 1 :(得分:1)
setContentView(R.layout.viewpagerlayout);
之后
您正在使用
直接 Button myButton=(Button) findViewById(R.id.myButton);
。
但实际上 viewpagerlayout 没有ID myButton 的任何视图。
这样你就会得到 NULL指针异常。在使用 findViewById 之前,您必须向ViewPager布局添加视图。
在您发布的代码中,您似乎在添加,但必须在 setContentView 之后使用它。