如何在Android上通过按钮点击显示ViewPager的特定页面

3
我正在开发一个项目,其中在一个屏幕上使用了View Pager,如下所示:
但是您可以看到,有一个上方的布局,其中列出了按照显示的页面选择的年份。当我们滑动View Pager时,年份也会根据显示页面的索引更改为下一个年份。我必须在相应的View Pager页面上实现对年份TextView的单击操作。但是如何实现呢?也就是说,当我们选择1998年时,将显示对应于1998年的页面。我已经编写了代码,但这对我来说不起作用。
代码:
for (int i = 0; i < (Overview_Years.size()); i++) {
                tvYear[i] = new TextView(Overview_New.this);
                img_Pagination[i] = new ImageView(Overview_New.this);

                //yearValue = Overview_Years.get(i).toString();
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                        LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT);
                // params.weight = 0.5f;

                params.gravity = Gravity.CENTER_VERTICAL;
                params.setMargins(40, 4, 0, 0);


                // tvYear[i].setLayoutParams(new
                // LayoutParams(LayoutParams.WRAP_CONTENT,
                // LayoutParams.WRAP_CONTENT));
                tvYear[i].setLayoutParams(params);

                // tvYear[i].setText(Overview_Years.get(i).toString());
                tvYear[i].setText(Overview_Years.get(i).toString());
                tvYear[i].setTag(Overview_Years.get(i).toString());

                tvYear[i].setGravity(Gravity.CENTER);
                tvYear[i].setTypeface(null, Typeface.BOLD);
                tvYear[i].setTextColor(Color.WHITE);
                tvYear[i].setId(i);
                tvYear[i].setPadding(2, 0, 1, 17);
                //tvYear[i].setTag(Overview_Years.get(i-1).toString());
                final TextView tv = tvYear[i];
                **tvYear[i].setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        for(int i=0;i<((ViewGroup)yearHorizontalScrollView.getChildAt(0)).getChildCount();i++){
                            if(((TextView)arg0)== ((ViewGroup)yearHorizontalScrollView.getChildAt(0)).getChildAt(i)){
                                currentposition = i;

                            }
                        }**

                        onYearSelect(((TextView)arg0).getText().toString());
                    }

                });


                layout_Years.addView(tvYear[i]);

                LinearLayout.LayoutParams paramsPagination = new LinearLayout.LayoutParams(
                        LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT);
                // params.weight = 0.5f;

                paramsPagination.gravity = Gravity.CENTER_VERTICAL;
                paramsPagination.setMargins(5, 2, 0, 0);
                img_Pagination[i].setLayoutParams(paramsPagination);
                /*if (i == 0) {
                    img_Pagination[0]
                            .setBackgroundResource(R.drawable.pagination_selected);
                } else {*/
                    img_Pagination[i]
                            .setBackgroundResource(R.drawable.pagination_unselected);
                //}
                img_Pagination[i].setId(i);
                layout_Pagination.addView(img_Pagination[i]);

                tvYear[0].setBackgroundResource(R.drawable.selector_x);
                /*tvYear[0]
                        .setBackgroundResource(R.drawable.selector_x);*/
                //tv_Overview_AllYears.setBackgroundResource(R.drawable.selector_bg_big_new);
                count=-1;

            }

提前感谢。

1个回答

17

您应该可以在OnClickListener内使用setCurrentItem方法(以下是其语法和文档),如果未停用smoothScroll,则您的viewpager将自动滚动(平稳地滚动到新位置)

ViewPager.setCurrentItem(int index);
OR
ViewPager.setCurrentItem(int index, boolean smoothScroll);
在这种情况下,您将替换索引为您想要的索引。因此,您可能还需要一个数组来存储年份和页面之间的关系,或者您可以在年份上设置一个标签(比如位置),然后在OnClickListener中检索该标签并转到该位置。
有关更多信息,请参见ViewPager文档

我看了你的代码,但是在你的代码中找不到那个方法,我只看到了一个“currentposition = i;”,但没有方法调用。我更新了@Tim的答案。 - Jorge Aguilar
谢谢@JorgeAguilar更详细的解释,让我的答案更完善了。 =) - FoamyGuy
不客气 @Tim,希望这个答案能解决他的问题。 - Jorge Aguilar
我仍然无法在上面的代码中看到setCurrentItem()的使用。我也在寻找这个,特别是因为从Fragment获取实例化的ViewPager似乎充满了困难! - tudor -Reinstate Monica-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接