查看viewpager中最后一页的更新,而不是在当前页面上更新

时间:2015-09-13 16:31:08

标签: android android-viewpager fragmentstatepageradapter

嗨,我相对较新,学习Android 我在这里停留使用viewpager。

我想显示可跳过的页面,并且正在使用Fragmentstatepageradapter和viewpager。页面的结构使得在上半部分中有两个动态创建的文本视图,并且基于该文本视图被点击,一些差异文本应该显示在下半部分中。

这是定义了viewpager的mainactivity xml:

 <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager_main"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="12"
            tools:layout="@layout/fragment_main"/>

这是fragment_main的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:weightSum="12"
    android:orientation="vertical">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_weight="6"
        android:layout_height="0dp"
        android:id="@+id/main_container"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/textviewdown"/>
</LinearLayout>

viewpager正在使用上半部分中正确的文本视图创建可跳过的页面。对于第一页,如果我单击文本框,则下部文本视图正确打开 但是,如果我滑动到任何其他页面并单击任何textview,内容不会在同一页面中更新,而是在我访问的上一页的textviewdown的相同位置更新。我无法理解为什么。

以下是主要片段的代码:

public class PageFragment extends Fragment

    public PageFragment(){
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootview = inflater.inflate(R.layout.fragment_main, container, false);
        RelativeLayout mainContainer = (RelativeLayout) rootview.findViewById(R.id.main_container);
        final Activity activity = getActivity();

        TextView textview1 = (TextView) new TextView(activity);
        textview1.setText("Click for 1");
        textview1.setX(0);
        textview1.setY(0);
        textview1.setWidth(150);
        textview1.setHeight(50);
        textview1.setOnClickListener(clicktext1);
        TextView textview2 = (TextView) new TextView(activity);
        textview2.setText("Click for 2");
        textview2.setX(0);
        textview2.setY(150);
        textview2.setHeight(50);
        textview2.setWidth(150);
        textview2.setOnClickListener(clicktext2);
        mainContainer.addView(textview1);
        mainContainer.addView(textview2);
        return rootview;
    }

    View.OnClickListener clicktext1 = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Toast.makeText(getContext(), "this is my Toast message!!! =)",
                    Toast.LENGTH_LONG).show();
            TextView textView3 = (TextView) getActivity().findViewById(R.id.textviewdown);
            textView3.setText("This is article text");
        }
    };

    View.OnClickListener clicktext2 = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            TextView textView3 = (TextView) getActivity().findViewById(R.id.textviewdown);
            textView3.setText("This is diff text");
        }
    };

以下是我正在使用的pageadapter代码:

public class PageAdapter extends FragmentStatePagerAdapter {
    public PageAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return new PageFragment();
    }

    @Override
    public int getCount() {
        return 5;
    }
}

以下是主要活动中的调用方式:

ViewPager mViewpager2;

PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager());
mViewpager2 = (ViewPager) getActivity().findViewById(R.id.pager_main);
mViewpager2.setOffscreenPageLimit(0);
mViewpager2.setAdapter(newspageAdapter);

我已经尝试添加此功能但无效:

public int getItemPosition(Object object) {
    return POSITION_NONE;
}

还尝试使用setoffscreenpagelimit值进行播放。

1 个答案:

答案 0 :(得分:0)

解决 我必须使rootview成为一个全局变量并将其传递给onclick函数并更改以下

TextView textView3 = (TextView) getActivity().findViewById(R.id.textviewdown);

TextView textView3 = (TextView) rootview.findViewById(R.id.textviewdown);