如何在viewpager页面中访问mybutton?
我是新来的这个android和java。如何在viewpager页面中访问mybutton?
我的viewpager现在可以滑动我所有的xml布局,但我不知道如何访问其中的项目。我尝试使用Button mybutton =(Button)findViewById(R.layout.result),然后在mybutton中设置onClickListener,但随后每次运行时都会关闭onClickListener。
这里是我的代码:
公共类主要扩展活动{
private ViewPager myviewpager;
private ViewPagerAdapter myviewpageradapter;
private static int NUM_AWESOME_VIEWS = 12;
Button button_1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myviewpageradapter = new ViewPagerAdapter();
myviewpager = (ViewPager) findViewById(R.id.myviewpager);
myviewpager.setAdapter(myviewpageradapter);
button_1 = (Button) myviewpager.findViewById(R.id.first_button);
button_1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
private class ViewPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return NUM_AWESOME_VIEWS;
}
@Override
public Object instantiateItem(View collection, int position) {
LayoutInflater layoutinflater = getLayoutInflater();
View view;
view = layoutinflater.inflate(R.layout.page1, null);
switch (position)
{
case 0 : view = layoutinflater.inflate(R.layout.page1, null); break;
case 1 : view = layoutinflater.inflate(R.layout.page2, null); break;
case 2 : view = layoutinflater.inflate(R.layout.page3, null); break;
case 3 : view = layoutinflater.inflate(R.layout.page4, null); break;
case 4 : view = layoutinflater.inflate(R.layout.page5, null); break;
case 5 : view = layoutinflater.inflate(R.layout.page6, null); break;
case 6 : view = layoutinflater.inflate(R.layout.page7, null); break;
case 7 : view = layoutinflater.inflate(R.layout.page8, null); break;
case 8 : view = layoutinflater.inflate(R.layout.page9, null); break;
case 9 : view = layoutinflater.inflate(R.layout.page10, null); break;
case 10 : view = layoutinflater.inflate(R.layout.page11, null); break;
case 11 : view = layoutinflater.inflate(R.layout.result, null);break;
}
((ViewPager) collection).addView(view,0);
return view;
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==((View)object);
}
@Override
public void finishUpdate(View arg0) {}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {}
}
你不能只用findViewById
这样一个ViewPager我的朋友。
由于您在适配器中夸大了不同的视图,因此Android无法找到您所指的Button,因为它不知道哪个xml布局存在它。
你可以做这样的事情..
private ViewPager myviewpager;
private ViewPagerAdapter myviewpageradapter;
private static int NUM_AWESOME_VIEWS = 12;
Button button_1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myviewpageradapter = new ViewPagerAdapter();
myviewpager = (ViewPager) findViewById(R.id.myviewpager);
myviewpager.setAdapter(myviewpageradapter);
}
private class ViewPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return NUM_AWESOME_VIEWS;
}
@Override
public Object instantiateItem(View collection, int position) {
LayoutInflater layoutinflater = getLayoutInflater();
View view = null;
switch (position) {
case 0:
view = layoutinflater.inflate(R.layout.page1, null);
Button bb = (Button) view.findViewById(R.id.first_button);
bb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "clicked button in first item", Toast.LENGTH_SHORT).show();
}
});
break;
case 1:
view = layoutinflater.inflate(R.layout.page2, null);
break;
case 2:
view = layoutinflater.inflate(R.layout.page3, null);
break;
case 3:
view = layoutinflater.inflate(R.layout.page4, null);
break;
}
((ViewPager) collection).addView(view);
return view;
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
只是想,你可以找到这些不同的XML布局文件的项目分别,当然你也可以深入了解,寻找更好的解决方案,但你的方式是否会导致ANR。给它尝试...
很棒 - 工作完全正确 –
太棒了!随时问任何你需要帮助的东西 –
你可以发布错误日志? – jemsnaban