Дублирование строк списка в фрагменте списка при изменении ориентации

У меня есть ListFragment, где я использую настраиваемый адаптер для заполнения списка. Все хорошо, пока я не изменил ориентацию и прокрутку. Тогда это выглядит так: ListView после нескольких изменений ориентации

Я предполагаю, что это имеет какое-то отношение ко мне, когда я дергаюсь с держателем вида, но я не могу получить доступ к коду прямо сейчас.

Причиной перекрывающегося фрагмента было то, что я использовал FrameLayout и добавил фрагмент с помощью FragmentTransition.add (…). Когда я изменил .add () на .replace (), старый фрагмент был удален, а новый добавлен, и моя проблема была решена.

У меня была схожая проблема, и в соответствии с этим я говорю об этом решении: – вы получаете это размытие, потому что каждый раз при изменении ориентации происходит создание нового экземпляра listfragment (возможно, он находится в oncreate ()), поэтому вам нужно просто сделать Экземпляр фрагмента списка один раз и при изменении ориентации замените этот фрагмент, а не добавляя снова.

Изменение ориентации вызывает onCreate для перезапуска, если вы не включили этот метод

public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } 

И поместите это в раздел активности вашего манифеста

 android:configChanges="orientation" 

Убедитесь, что это первый вызов onCreate (), другими словами, определить, не вызвана ли обратная связь из-за поворота экрана.

 protected void onCreate(Bundle savedInstanceState) { if(savedInstanceState == null) { // transition.add(Your fragment,...) } } 

У меня была такая же проблема, и из-за использования FrameLayout. Сначала вам нужно проверить, добавил ли ваш фрагмент к активности:

 String TagName = "F"; 

Добавление фрагмента без пользовательского интерфейса. Если вы хотите получить фрагмент из действия позже, вам нужно использовать findFragmentByTag (). «Google» http://developer.android.com/guide/components/fragments.html#Adding

 Fragement F = getFragmentManager().findFragmentByTag(TagName); 

Затем проверьте

 if(F == null) { F = new F(); getFragmentManager() .beginTransaction() .add(R.id.container, F, TagName) .commit(); } 

Целью здесь является недопущение добавления или создания нового экземпляра фрагмента, который сохраняется во время изменения конфигурации, что вызывает проблему при использовании FrameLayout в качестве контейнера.

Решение 2 (простое): Единственное, что вам нужно сделать, это изменить контейнер на ex: LinearLayout, и все. Но, на мой взгляд, это не лучшее решение из-за множества экземпляров фрагмента.

Надеюсь, эта помощь;