0

ビューごとに 1 つの ImageView を持つ ViewPager があります。ビューで currentItem の OnTouchListener をセットアップする必要があります。次のコードがありますが、リスナーをセットアップしようとすると NULL になり続けます。以下は私のコードです。現在のアイテム ImageView への有効な参照を取得するにはどうすればよいですか?

private class CalendarPagerAdapter extends PagerAdapter {

        public int getCount() {
            return NUM_VIEW;
        }

        public Object instantiateItem(View collection, int position) {

            View view=null;

            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            int resId = 0;
            switch (position) {
            case 0:
                resId = R.layout.cal_july;
                view = inflater.inflate(resId, null);
                calendar = (ImageView) findViewById(R.id.imageView1);
                                // IT IS ALWAYS NULL HERE
                if(calendar == null) {
                    System.out.println("its null!!!!!!");
                } else {
                    System.out.println("its NOT NULL!!!!!");
                }
                // Breaks here, obviously!!!
                calendar.setOnTouchListener(getOnTouchListener());
                break;
            case 1:
                resId = R.layout.cal_august;
                view = inflater.inflate(resId, null);
                calendar = (ImageView) findViewById(R.id.imageView1);
                calendar.setOnTouchListener(getOnTouchListener());
                break;              
            case 2:
                resId = R.layout.cal_september;
                break;
            case 3:
                resId = R.layout.cal_october;
                break;
            case 4:
                resId = R.layout.cal_november;
                break;

            }

            ((ViewPager) collection).addView(view, 0);

            return view;
        }
4

1 に答える 1

0

電話すると:

view = inflater.inflate(resId, null);
calendar = (ImageView) findViewById(R.id.imageView1);

アクティビティの contentView で ID R.id.imageView1 を持つ ImageView を探します (つまり、 onCreate() で最初に設定したレイアウト)。それはあなたが望むものではないと思います。

おそらく、膨張させたばかりのビューでビューを見つけたいと思うでしょう。これを試して:

view = inflater.inflate(resId, null);
calendar = (ImageView) view.findViewById(R.id.imageView1);
于 2012-07-01T15:42:07.447 に答える