Просмотр обновления на последней странице в viewpager, а не обновление на текущей странице

Привет, я относительно новичок и изучаю Android.
Я застрял в использовании viewpager здесь.

Я хочу показать перелистываемые страницы и делаю это с помощью Fragmentstatepageradapter и viewpager. Структура страниц такова, что в верхней половине есть два динамически создаваемых текстовых представления, и в зависимости от того, какой из них щелкнут, в нижней половине должен отображаться некоторый текст различий.

Это 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"/>

А это xml фрагмента_main:

<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 создает листаемые страницы с правильным текстовым представлением в верхней половине. И для первой страницы, если я нажму на текстовое поле, нижнее текстовое представление откроется правильно.
Но если я перейду на любую другую страницу и нажму на любое текстовое представление, содержимое не обновится на той же странице, а обновится в той же позиции 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.


person androidnoob    schedule 13.09.2015    source источник


Ответы (1)


Решено Мне пришлось сделать rootview глобальной переменной и передать ее функции onclick и изменить следующее

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

to

TextView textView3 = (TextView) rootview.findViewById(R.id.textviewdown);
person androidnoob    schedule 24.09.2015