我想实现 ViewPager 来把俩个view结合在一个activity中,但是当我在inflated views里使用findViewById来访问item时, 现在遇到的错误是NullPointerException。
自定义的 page adapter:
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;
}
}
activity 如下,我想访问 layout1 中的 button ,但是给出 null 值。
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包含一个按钮。 请指点一二,谢谢!
你在 ViewPager 中设置 PageAdapter了吗?如果没有设置,然后使用按钮删除line,然后在activity中添加代码:
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPagerLayout);
viewPager.setAdapter(new CustomPagerAdapter());
取代:
Button myButton = (Button) findViewById(R.id.myButton);
你可以调用 findViewById 来获取 adapter 这个方法中的按钮:
@Override
public Object instantiateItem(View collection, int position) {
... // your previous code
final Button myButton = (Button) findViewById(R.id.myButton);
return view;
}
需要这样来获取,根据所属的layout的View来获取,形如:
Button myButton=(Button)layout1.findViewById(R.id.myButton);
View layout1= layoutInflater.inflate(R.layout.layout1, null);
Button myButton=(Button)layout1.findViewById(R.id.myButton);