如何在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) {} 

} 
+0

你可以发布错误日志? – jemsnaban

你不能只用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。给它尝试...

+0

很棒 - 工作完全正确 –

+0

太棒了!随时问任何你需要帮助的东西 –