1

Привет, у меня есть псевдоинфинитет ViewPager с FragmentStatePagerAdapter. Я динамически добавляю в него CalendarFragment. У меня есть переменная mUpdatedShiftsCont члена, что является точкой подключения к другому внутреннему фрагменту:Динамический внутренний фрагмент в перекрытии ViewPager

CalendarFragment.java:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { 
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.calendar_fragment, container, false); 
    mCalendarView = (GridView) rootView.findViewById(R.id.calendar); 
    mUpdatedShiftsCont = (FrameLayout) rootView.findViewById(R.id.calendar_updated_shifts_container); 

    return rootView; 
} 

layout.calendar_fragment:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/calendar_fragment_id" 
    android:orientation="vertical" > 

    ... 

    <FrameLayout 
    android:paddingTop="30dp" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/calendar_updated_shifts_container" /> 

</LinearLayout> 

Когда я пытаюсь добавить внутренний фрагмент для подключения точки,

getFragmentManager().beginTransaction() 
    .add(mUpdatedShiftsCont.getId(), fragment).commit(); 

все вложенные фрагменты помещаются в один родительский фрагмент в ViewPager:

Кто-нибудь есть идеи, как решить эту проблему? Заранее спасибо.

+0

Вы хотите добавить или заменить внутренний фрагмент? – santalu

+0

Я хочу добавить внутренний фрагмент к фрагментам в 'ViewPager'. – skywall

+0

проверить это http://stackoverflow.com/questions/7723964/replace-fragment-inside-a-viewpager?rq=1 – santalu

ответ

1

Я наконец нашел, где проблема. Когда я добавлял внутренний фрагмент к фрагменту в ViewPager, я использовал метод mUpdatedShiftsCont.getId() для получения идентификатора контейнера. Когда я пытаюсь напечатать идентификаторы во всех ViewPager футовых контейнеров фрагментов S я получаю этот результат:

Log.d("CF", "ID: " + String.valueOf(mUpdatedShiftsCont.getId())); 

09-27 23:14:05.154 8388-8388/cz.skywall.sichtovnik_v2 D/CF: ID: 2131492885 
09-27 23:14:05.170 8388-8388/cz.skywall.sichtovnik_v2 D/CF: ID: 2131492885 
09-27 23:14:05.193 8388-8388/cz.skywall.sichtovnik_v2 D/CF: ID: 2131492885 
09-27 23:14:05.225 8388-8388/cz.skywall.sichtovnik_v2 D/CF: ID: 2131492885 
09-27 23:14:05.256 8388-8388/cz.skywall.sichtovnik_v2 D/CF: ID: 2131492885 

Такие разные контейнеры (потому что разные фрагменты) имеют одинаковый идентификатор. Решение:

mUpdatedShiftsCont.setId(1000 + mCurrentMonth + mCurrentYear); 
getFragmentManager().beginTransaction() 
    .add(1000 + mCurrentMonth + mCurrentYear, fragment).commit(); 

Я установил новые идентификаторы содержимое фрагмента базирующейся в од. Теперь они уникальны (возможно) и работают так, как я хочу.

+1

Если в вашем пейджере имеется только небольшое количество конечных фрагментов, вы можете определить идентификаторы в папке res/values ​​и использовать их (чтобы гарантировать уникальность). –

+0

Спасибо за консультацию. К сожалению, у меня много фрагментов. – skywall

+1

@skywall вы решаете мою проблему, спасибо! Поскольку у меня только 4 фрагмента, я следую @MH. предложение определить идентификаторы в 'res/values ​​/ ids'. – li2

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

  • Нет связанных вопросов^_^