0

我有一个 ViewPager,每个视图都有一个 ImageView。我需要为视图中的 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);

它会在您的 Activity 的 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 回答