如何解决这个奇怪的 viewpager 问题?

How to solve this weird issue of viewpager?

我有一个 viewpager,每个页面都包含一个数字

示例:

第 1 页包含带有文本“1”的文本视图

第 2 页包含带有文本“2”的文本视图

......再加20个

然后我通过以下方式收到短信:

        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    @Override
                    public void onPageSelected(int arg0) {
                        // TODO Auto-generated method stub

                                TextView myText= adapter.getTextView();
                                CharSequence charSequence = dateArea.getText();
                                String dateString = charSequence.toString();
                                Log.e("TEST1", dateString);

                    }
}

当我单向滑动(向右或向左)时,它会正确显示文本。但是当我向2方向滑动时,问题出现了:

示例:

我向左滑动(从10开始),结果是9(正确)。

然后我向右滑动,结果还是9(应该是10)。

然后我再次向左滑动,结果是9。此时,如果我再向左滑动一次,它会显示正确的结果,即8。请教我如何解决这个问题!

编辑:

    public class ViewPagerAdapter extends PagerAdapter {
        Context context;
        LayoutInflater inflater;
        String[] listNumber;
        TextView textView;

        public ViewPagerAdapter(Context context, String[] listNumber) {
            this.context = context;
            this.listNumber= listNumber;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((RelativeLayout) object);
        }

        @Override
        public Object instantiateItem(final ViewGroup container, final int position) {
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View itemView = inflater.inflate(R.layout.viewpager_adapter, container, false);
            textView= (TextView) itemView.findViewById(R.id.textView);
            textView.setText(listNumber[position]);

            ((ViewPager) container).addView(itemView);
            return itemView;

        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // Remove viewpager_item.xml from ViewPager
            ((ViewPager) container).removeView((RelativeLayout) object);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return listNumber.length;
        }

        public TextView getTextView() {
            return textView;
        }
    }

首先,通过将 TextView 设为本地来将您的适配器更改为此:

@Override
    public Object instantiateItem(final ViewGroup container, final int position) {
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.viewpager_adapter, container, false);
        Textview textView= (TextView) itemView.findViewById(R.id.textView);
        textView.setText(listNumber[position]);
        textView.setTag("tv"+position);

        ((ViewPager) container).addView(itemView);
        return itemView;

    }

然后,您可以使用以下代码段获取 pagechange 上的 textview。 adapter.getTextView() 不再是必需的。

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub

            TextView myText= (TextView) mViewPager.findViewWithTag("tv"+ arg0);
            mText.setText(dateString);

            CharSequence charSequence = dateArea.getText();
            String dateString = charSequence.toString();
            Log.e("TEST1", dateString);

        }
    }