2011-10-14 37 views
4

我是新来的这个android和java。如何在我的一个viewpager页面访问我的按钮?

我的viewpager现在可以滑动我所有的xml布局,但我不知道如何访问其中的项目。

我尝试使用Button mybutton = (Button) findViewById (R.layout.result),然后在mybutton中设置onClickListener,但之后每次运行它时都被迫关闭。

这里是我的代码:

public class main extends Activity { 

    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

我有同样的问题。如果使用调试器,您将看到PageAdapter内的代码在屏幕上绘制任何内容之前的某个时间点启动,因此您刚刚在'.setAdapter'之后尝试的'findViewById'将返回null。 请别人告诉我们一个pagerAdapter的生命周期如何工作,所以我们可以访问它里面的视图。谢谢! – Kaizie

+0

kaizie ..你有什么发现? –

+0

尝试:'myviewpager.findViewById(resId);' – Shellum

回答

2

这可能只是问题的,未找到您的项目大抵如此试试这个(如果你的观点是没有的LinearLayout改变它)

LayoutInflater getView = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

LinearLayout view1 =(LineaLayout)getView.inflate(R.layout.your_view,null); 

但是你的按钮可能会抛出异常,并且有一个onClickListener被设置。 如果它只是按钮的XML定义它:

android:onClick"buttonClick" 

然后在代码

public void buttonClick(View v){ 

// do something 

} 

如果因为以后需要引用按钮,这是不可能的,我坚持了同样的问题,也会想知道它是如何工作的。

0

我认为这里的问题是,你正试图找到一个视图(findViewById)还没有instatiated(膨胀)。尝试在ViewPagerAdapter类型的instatiateItem方法内设置按钮侦听器。

实施例:

switch(position){ 
    case 0 : 
    view = layoutinflater.inflate(R.layout.page1, null); 
    button_1 = (Button) view.findViewById(R.id.first_button); 
    button_1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
       finish(); 
       } 
     }); 
    break; 
    (...)  
    } 
相关问题