HorizontalScrollView дублированный вид, когда в ViewPager
У меня есть HorizontalScrollView внутри RelativeLayout на двух страницах в ViewPager. Сначала все работает нормально, но когда я пролистываю страницы внутри ViewPager, а затем снова пытаюсь прокрутить HorizontalScrollView, представление дублируется следующим образом:
Так что это похоже на дублирование: один вид застрял на заднем плане, а второй на переднем плане нормально прокручивается.
Я пробовал несколько вещей, таких как игра с цветом фона, persistentDrawingCache, removeAllViews и добавление их снова, но это все еще происходит.
Можете ли вы помочь мне выяснить, что вызывает это и как это исправить? Большое спасибо!
Обновление: вот фрагменты кода
horizontal_scrollview_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:overScrollMode="never"
android:persistentDrawingCache="none"
android:layout_centerHorizontal="true" >
<LinearLayout
android:id="@+id/horizontalScrollLinearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" />
</HorizontalScrollView>
horizontal_scrollview_child_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.ursus.nameday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<com.xxx.CircularImageView
android:id="@+id/contactPhotoImageView"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/ic_launcher"
app:border="true"
app:border_color="@android:color/holo_blue_light"
app:border_width="2dp"
app:shadow="true" />
<TextView
android:id="@+id/contactNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
HorizontalScrollViewFragment.java
public class HorizontalScrollViewFragment extends Fragment {
private LinearLayout childLinearLayout;
@Override
public View onCreateView(final LayoutInflater inflater,
final ViewGroup container, final Bundle savedInstanceState) {
final View rootView = inflater.inflate(
R.layout.horizontal_scrollview_layout, container, false);
contactsLinearLayout = (LinearLayout) rootView
.findViewById(R.id.horizontalScrollLinearLayout);
//ADDING CHILDREN HERE
final View child1 = LayoutInflater.from(getActivity()).inflate(
R.layout.horizontal_scrollview_child_layout, null);
childLinearLayout.addView(child1);
...
return rootView;
}
}
DayViewFragment.java (фрагмент вставлен в ViewPager)
public class DayViewFragment extends Fragment {
...
private HorizontalScrollViewFragment fragment;
@Override
public View onCreateView(final LayoutInflater inflater,
final ViewGroup container, final Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.day_item_layout,
container, false);
...
final FragmentManager fm = getChildFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
fragment = new HorizontalScrollViewFragment();
ft.add(R.id.fragmentContainer, fragment);
ft.commit();
...
return rootView;
}
}
1 ответ
Проблема возникла, когда фрагмент был воссоздан после того, как был достигнут предел количества экранов, которые должны быть сохранены ViewPager, и фрагмент, содержащий фрагмент, должен был быть воссоздан. Значение по умолчанию равно 1, поэтому мне нужно всего лишь изменить его на 2 (setOffscreenPageLimit(2)), так как у меня есть 3 фрагмента в ViewPager. Теперь проблема не возникает. Это не идеальное решение, но работает. В случае, если это не поможет никому другому: вам нужно контролировать, когда и как фрагмент воссоздан, и убедиться, что вид очищен.