Intereting Posts
Отключить прокрутку в веб-просмотре? Где находится домашнее пиво для установки android-sdk Eclipse не создает файлы в новом проекте Android Отправьте файл .apk клиенту для просмотра Назначение IP-адреса владельца виртуальной сети Wifi в Android TextView.getSelectionEnd () возвращает значение начального индекса для устройств Samsung Marshmallow 6.0 Закрыть / скрыть Soft Soft Перейдите в начало в RecyclerView с помощью LinearLayoutManager Размер спрайтов на разных размерах экрана Andengine Android Можно ли «грациозно разлагать» приложение андроида? Невозможно выполнить dex: несколько файлов dex определяют Lcom / google / android / gms / analytics / internal / Command Как получить «вызов» экземпляра Activity из вызываемой активности? Почему Lint показывает предупреждение при использовании в (дюймах) или мм (миллиметрах) единиц измерения? Неизвестный URL-адрес: // загрузки / my_downloads Как установить выбранную по умолчанию опцию в всплывающем меню Android?

ViewPager внутри фрагмента исчезает после transaction.remove () (Ведение экземпляра?)

Я использую Google API 8 (Android 2.2) с пакетами v4.

Привет, вот моя проблема:

У меня есть FragmentActivity, у которого есть меню, которое всегда остается на экране и немного контейнера (FrameLayout), где я помещаю много фрагментов. Мое приложение отлично работает, когда я скрываю и показываю фрагменты, но он падает после загрузки всех фрагментов, потому что у меня ограниченная память. В этом случае мне пришлось удалить некоторые фрагменты при загрузке других, чтобы приложение не разбилось. Но здесь возникает еще одна проблема: мои пейджеры не перезагружаются после того, как я их удаляю, все остальные фрагменты работают нормально. Только мои пейджеры не показывают, они не падают, просто исчезают. Вот несколько кодов, чтобы дать вам понять, о чем моя проблема:

MyFragmentActivity.java имеет этот макет:

<LinearLayout ...(some code from menu that doesn't matter) <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout> </LinearLayout> 

В этом FrameLayout я поместил все свои фрагменты. Фрагменты пейджеров – один из них, и его расположение выглядит так:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+android:id/some_pager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 

И я реализовал этот абстрактный класс AbstractPagerFragment :

 import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public abstract class AbstractPagerFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View fragment = inflater.inflate(getLayoutID(), container,false); PagerAdapter mPagerAdapter = initializePager(); ViewPager pager = (ViewPager) fragment.findViewById(getPagerID()); pager.setAdapter(mPagerAdapter); return fragment; } private PagerAdapter initializePager() { PagerAdapter mPagerAdapter = new templateDigital.util.PagerAdapter(getFragmentManager(), getFragments()); return mPagerAdapter; } public abstract List<Fragment> getFragments(); public abstract int getLayoutID(); public abstract int getPagerID(); } 

Это использует мой PagerAdapter, который выглядит так:

 import java.util.List; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class PagerAdapter extends FragmentPagerAdapter{ private List<Fragment> fragments; public PagerAdapter(FragmentManager fManager, List<Fragment> fragments) { super(fManager); this.fragments = fragments; } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public int getItemPosition(Object object) { return POSITION_NONE; } } 

Теперь давайте реализуем мой AbstractPagerFragment :

 import templateDigital.main.R; import templateDigital.util.fragments.AbstractPagerFragment; import templateDigital.util.fragments.GenericFragment; import android.support.v4.app.Fragment; public class ConcretePagerFragment extends AbstractPagerFragment { private List<Fragment> fragments; public ConcretePagerFragment() { fragments = new ArrayList<Fragment>(); fragments.add(new GenericFragment(R.layout.concept_page1_fragment)); fragments.add(new GenericFragment(R.layout.concept_page2_fragment)); fragments.add(new GenericFragment(R.layout.concept_page3_fragment)); //GenericFragments is a class that extends Fragments and just inflate a layout with a background image. } @Override public List<Fragment> getFragments() { return fragments; } @Override public int getLayoutID() { return R.layout.pager_fragment; } @Override public int getPagerID() { return R.id.some_pager; // the pager inside the layout } } 

Хорошо, теперь я добавляю его из своего контента (FrameLayout), как это (myFragment – это PagerFragment, а myTag – это строка, которая представляет свой тег, определенный мной):

 FragmentTransaction transaction = fragmentManager.beginTransaction(); if (fragmentManager.findFragmentByTag(myTag) == null) { transaction.add(R.id.content,myFragment, myTag); } transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); hideAllOtherFragments(myTag, transaction); //Here I hide all other fragments, the code is okay. Trust me. transaction.show(myFragment()); transaction.commit(); 

И вот как я его удаляю:

 ... transaction.remove(myFragment); ... 

Но когда он снова загрузится после перехода к фрагменту в меню, используя тот же метод, который я использовал в первый раз (код выше), пейджер больше не отображается. Может ли кто-нибудь разрешить это?

Если вы прочтете все это, спасибо, вы чемпион.

Solutions Collecting From Web of "ViewPager внутри фрагмента исчезает после transaction.remove () (Ведение экземпляра?)"

На самом деле, если вы хотите реализовать ViewPager с фрагментами, вы должны добавить TabHost, TabWidget FrameLayout и ViewPager.

TabHost будет контейнером для окна с вкладками. Этот объект содержит двоих детей: набор ярлыков вкладок, которые пользователь нажимает, чтобы выбрать конкретную вкладку, а FrameLayout – это объект, который отображает содержимое этой страницы. И после того, как вам нужно создать TabAdapter (что-то вроде вашего PagerAdapter) и добавить фрагменты для каждой вкладки, вызвав mTabsAdapter.addTab и отправив фрагмент в качестве параметра

Я сделал сообщение об этом , где объясню, как интегрировать фрагменты и ViewPager. Надеюсь, поможет.