Привет, я относительно новичок и изучаю 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.