ViewPager中的动态内部片段重叠

时间:2014-09-27 21:12:48

标签: android android-fragments android-viewpager fragmentpageradapter

您好我是ViewPagerFragmentStatePagerAdapter的假无限CalendarFragment。我动态地将mUpdatedShiftsCont添加到其中。我有成员变量@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; } 什么是连接指向另一个内部片段:

CalendarFragment.java:

<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>

layout.calendar_fragment:

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

当我尝试将内部片段添加到连接点时,

ViewPager

所有嵌套片段都放在{{1}}中的一个父片段中:

有谁知道如何解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我终于找到了问题所在。当我在ViewPager中添加内部片段到片段时,我使用方法mUpdatedShiftsCont.getId()来获取容器ID。当我尝试在所有ViewPager的片段中打印容器的ID时,我得到了这个结果:

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

所以不同的容器(因为不同的片段)具有相同的ID。的解决方案:

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

我根据od片段的内容设置了新的ID。它们现在是独一无二的(可能),它可以按照我想要的方式工作。