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

标签 android android-viewpager

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

示例:

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

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

......再加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);

        }
    }

关于android - 如何解决这个奇怪的 viewpager 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556321/

相关文章:

android - 当我运行该程序时,我会遇到运行时问题

安卓 : Reload particular fragment of fragmentPageAdapter not all?

android - 同步服务运行后刷新 FragmentActivity 中的 fragment

android - Espresso : click first item in ListView inside a ViewPager

Android ArrayList TextView 在 setText 后不显示文本

java - 我可以同时使用 implements 和 extends 吗?

android - 滑动 View 分页器 fragment 不会移动选项卡

android - 我可以将 View 寻呼机与 View 一起使用(而不是 fragment )

android - ORMLite 中是否继承了 ID 字段?

android - AdMob 自适应横幅。从上下文中获取 DisplayMetrics