2013-07-25 49 views
1

我在ViewPager中有两个页面。在这两个页面中,我有按钮,我必须对它们进行操作。点击监听器的按钮对第二页它不适用于第一页。 这里是我试图点击监听器在View寻呼机中不工作

public class MainActivity extends Activity { 
    int noofsize = 2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ViewPagerAdapter adapter = new ViewPagerAdapter(MainActivity.this, 
       noofsize); 
     ViewPager myPager = (ViewPager) findViewById(R.id.reviewpager); 
     myPager.setAdapter(adapter); 
     myPager.setCurrentItem(0); 
    } 


} 

活动和适配器类和适配器类是如下

public class ViewPagerAdapter extends PagerAdapter implements OnClickListener { 
    int size; 
    Activity act; 
    View layout; 
    TextView pagenumber; 
    Button click; 

    public ViewPagerAdapter(MainActivity mainActivity, int noofsize) { 
     // TODO Auto-generated constructor stub 
     size = noofsize; 
     act = mainActivity; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return size; 
    } 

    @Override 
    public Object instantiateItem(View container, int position) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = (LayoutInflater) act 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     layout = inflater.inflate(R.layout.pages, null); 
     pagenumber = (TextView) layout.findViewById(R.id.pagenumber); 
     pagenumber.setText("Now your in Page"+position); 
     click = (Button) layout.findViewById(R.id.click); 
     click.setOnClickListener(this); 
     ((ViewPager) container).addView(layout, 0); 
     return layout; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 
    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 
    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if (v == click) { 
      Toast.makeText(act, "click event called", Toast.LENGTH_SHORT) 
        .show(); 
     } 

    } 

} 
+0

为什么在适配器中使用onclick()?它应该在碎片或活动中 –

回答

1

我面对同样的问题,在我的情况在instantiateItem集点击收听解决。你可以做这样的事情可能能有所帮助

click.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     } 
    }); 

你可以试试这个也

click.setOnClickListener(act); 
0

我认为这部分是错误的:

if (v == click) { // What is click ?! you can't compare that 
    Toast.makeText(act, "click event called", Toast.LENGTH_SHORT) 
      .show(); 
} 

将其替换:

if (v.getId() == R.id.theIdOfTheView) { 
    Toast.makeText(act, "click event called", Toast.LENGTH_SHORT) 
      .show(); 
} 

instantiateItem内使用此:

container.onClickListener(); 
+0

已更改它仍然不起作用 – Nandhiya

+0

如果删除'if'语句,您是否收到Toast消息? – g00dy

2

如果你想赶上按一下按钮,做一些事情,这是更好地做它以最简单的方式...
少代码更好!
我们走吧;
您的按钮组件的layout.xml(或者是组件)里面应该有这个

android:onClick="onClick_function" 

那么你就可以自动捕获这个事件你的代码中,你只需要具有相同名称的功能

public void onClick_function(View v) { 
// here we go! 
} 
+0

它是一个很酷的牛屎没有意义.. – DJphy