Фрагмент не удалось заменить фрагментом в viewpager

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

--Если я использую метод замены во фрагментах, он не заменяется должным образом в том смысле, что если A является фрагментом, состоящим из viewpager, а B – фрагментом, который я хочу заменить.
--Тогда, если я использую замену, B виден, но A также фигурирует под фрагментом B

FragmentManager m=getActivity().getSupportFragmentManager();
                FragmentTransaction ft = getActivity().getSupportFragmentManager()
                        .beginTransaction();
                Demobutton demobutton = new Demobutton();

                ft.replace(R.id.lay, demobutton);
                ft.commit();

Надеюсь, вы понимаете мою проблему. Если вы считаете, что мой вопрос неполный, сообщите мне об этом.


person Ramz    schedule 29.05.2013    source источник
comment
Является ли R.id.lay идентификатором контейнера фрагментов?   -  person Blackbelt    schedule 29.05.2013
comment
нет, это идентификатор макета viewpager   -  person Ramz    schedule 29.05.2013
comment
это неверно. первый аргумент замены должен быть идентификатором контейнера   -  person Blackbelt    schedule 29.05.2013
comment
так что в том смысле, что я должен указать идентификатор макета firstfragments, я прав?   -  person Ramz    schedule 29.05.2013
comment
Обычно я создаю FragmentActivty и использую setCotentView для установки макета, который служит контейнером для фрагмента.   -  person Blackbelt    schedule 29.05.2013
comment
thnaq, но мне жаль, что это тоже не сработало для меня... :(   -  person Ramz    schedule 29.05.2013
comment
Это то, что предлагает документация Android   -  person Blackbelt    schedule 29.05.2013
comment
давайте продолжим обсуждение в чате   -  person Ramz    schedule 29.05.2013
comment
Привет, черный пояс, у меня проблема с анимацией, можете ли вы просмотреть ее ...... stackoverflow.com/questions/17017972/   -  person Ramz    schedule 10.06.2013


Ответы (2)


У меня есть два предложения в зависимости от того, как вы используете фрагмент DemoButton:

1) Возможно, ваша проблема связана с вложенными фрагментами. Вы получаете FragmentManager из действия, но если Demobutton уже является частью фрагмента, вместо этого используйте getChildFragmentManager() внешнего фрагмента.

2) Из моего опыта при использовании ViewPager с фрагментами PagerAdapter ViewPager должен выполнять все транзакции фрагментов. Вы можете расширить и перезаписать класс FragmentPagerAdapter из библиотеки поддержки, чтобы получить правильный фрагмент в вашем ViewPager, когда вам это нужно.

person Stenes    schedule 29.05.2013
comment
я работал с первым решением, но я не нашел результата, который он показывал, как в предыдущем...., - person Ramz; 29.05.2013

Я разработал небольшой пример приложения, в котором это достигается без перезаписи нативных классов.

Суть в том, чтобы использовать фрагмент в качестве контейнера.

В вашем ViewPagerAdapter:

@Override
public Fragment getItem(int position) {
    /*
     * IMPORTANT: This is the point. We create a RootFragment acting as
     * a container for other fragments
     */
    if (position == 0)
        return new RootFragment();
    else
        return new StaticFragment();
}

Макет RootFragment должен выглядеть так:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/root_frame" >
</FrameLayout>

Вы можете просмотреть мое полное объяснение здесь: https://stackoverflow.com/a/21453571/1631136

person dlao    schedule 30.01.2014