3

以下に示すように、1 つの画面で View Pager を使用するプロジェクトを開発しています。

ここに画像の説明を入力

しかし、そこには、表示されたページに従って選択された年がリストされている上部のレイアウトがあります。ビューページャーをスワイプすると、表示されたページのインデックスに従って、年も次の年に変更されます。対応するビューページャーページが表示される年の TextViews に Click 操作を実装する必要があります。しかし、それはどのように実装されますか?別のビューのクリックを呼び出すときに、ビュー ページャーにページの特定のインデックスを表示する方法を意味します。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;

            }

事前にt​​hnx。

4

1 に答える 1

17

OnClickListener内でsetCurrentItemメソッド(以下の構文とドキュメント)を使用できるはずです。ビューページャーは自動的に(smoothScrollが非アクティブ化されていない場合)新しい位置にスクロールします。

ViewPager.setCurrentItem(int index);
OR
ViewPager.setCurrentItem(int index, boolean smoothScroll);

この場合、必要なインデックスをインデックスに置き換えます。したがって、年とページの関係を格納する配列が必要になる場合もあります。または、年にTAG(位置など)を設定し、OnClickListenerでそのTAGを取得してその位置に移動することもできます。

詳細については、ViewPagerのドキュメントを参照してください

于 2012-08-03T19:59:52.887 に答える