2017-02-27 89 views
0

我是新來的這個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

回答

1

你不能只用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

太棒了!隨時問任何你需要幫助的東西 –