Android-用Viewpager怎么监听按钮?

发布于 2017-01-17 13:23:05 字数 1160 浏览 1195 评论 4

我尝试过这样写:

private void InitViewPager() {
mPager = (ViewPager) findViewById(R.id.vPager);
list4TabPage = new ArrayList<View>();

btnKnowledge = (Button) LayoutInflater.from(this)
.inflate(R.layout.tabfirst, null)
.findViewById(R.id.tab_knowledge);
btnKnowledge.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(HomeActivity.this, "XXXXXXXXXXX", 1).show();
}
});
list4TabPage.add(LayoutInflater.from(this).inflate(R.layout.tabfirst,
null));
list4TabPage.add(LayoutInflater.from(this).inflate(R.layout.tabsecond,
null));
list4TabPage.add(LayoutInflater.from(this).inflate(R.layout.tabchapter,
null));
mPager.setAdapter(new MyPagerAdapter(list4TabPage));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

泛泛之交 2017-06-29 01:10:05

把每一个view依附到fragment中,可用参考下例子

归属感 2017-04-28 23:11:49

代码太少,看不出原因,没有看到btnKnowledge Button添加到哪个布局上了。
16行addView时又初始化了,把之前的监听覆盖掉了。

View v1 = LayoutInflater.from(this).inflate(R.layout.tabfirst, null);

btnKnowledge = (Button) v1.findViewById(R.id.tab_knowledge);
btnKnowledge.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Toast.makeText(HomeActivity.this, "XXXXXXXXXXX", 1).show();
}
});
list4TabPage.add(v1);

清晨说ぺ晚安 2017-03-12 21:03:36

在适配器初始化中

@Override
        public Object instantiateItem(final View view, int position) {
            switch (position) {
            case 0:
                btnKnowledge = (Button)mListViews.get(position).findViewById(R.id.tab_knowledge);
                btnKnowledge.setOnClickListener(new OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Toast.makeText(HomeActivity.this, "XXXXXX", 1).show();
                    }
                });
                break;

            default:
                break;
            }
            ((ViewPager) view).addView(mListViews.get(position), 0);            
            return mListViews.get(position);
        }

结果证明能够解决问题,调试通过。

夜无邪 2017-02-19 20:57:26

初始化有点问题。一般会放在adapter的instantiateItem中去初始化,参考下面的示例代码:

public class MyPagerAdapter extends PagerAdapter {

@Override
public int getCount() {
return 3;
}

@Override
public Object instantiateItem(final View collection, final int position) {
v = new View(collection.getContext());
LayoutInflater inflater =
(LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

int resId = 0;
switch (position) {
case 0:
resId = R.layout.cate1;
v = inflater.inflate(R.layout.cate1, null, false);
add1 = (Button) v.findViewById(R.id.btnAdd);
add1.setOnClickListener( new OnClickListener() {
public void onClick(View m) {
Toast.makeText(collection.getContext(),"click",Toast.LENGTH_LONG).show();
}
});

break;
case 1:
resId = R.layout.cate2;
break;
case 2:
resId = R.layout.cate3;
break;
}

View view = inflater.inflate(resId, null);
((ViewPager) collection).addView(v, 0);

return v;
}

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

}

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

}

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文