2013-05-29 7 views
0

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

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

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

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

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

+0

является R.id.lay идентификатор контейнер для фрагментов? – Blackbelt

+0

нет его идентификатор макета viewpager – Ramz

+0

это неправильно. первый аргумент replace должен быть идентификатором контейнера – Blackbelt

ответ

0

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

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

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

+0

i hav работал с первым решением, но я не нашел результат, который он показывал, как и в предыдущем ...., – Ramz

0

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

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

В вашем 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

+0

тоже исправлено :) – dlao

+0

:-) 15 символов .... – kleopatra

Смежные вопросы