1

嗨,我已經假無限ViewPagerFragmentStatePagerAdapter。我動態地添加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 2014-09-27 21:45:05

+0

我想在'ViewPager'中將片段添加到片段。 – skywall 2014-09-27 21:56:49

+0

檢查了這一點http://stackoverflow.com/questions/7723964/replace-fragment-inside-a-viewpager?rq=1 – santalu 2014-09-27 21:58:02

回答

1

我終於找到問題所在。當我在ViewPager中添加內部片段來分段時,我使用方法mUpdatedShiftsCont.getId()來獲取容器ID。當我嘗試打印集裝箱的ID的所有ViewPager的片段,我得到這樣的結果:

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(); 

我提出了新的ID基於OD片段的內容。他們現在是獨一無二的(可能),它按我的意願工作。

+1

如果在尋呼機中只有少量的有限片段,您可以在res/values文件夾中定義這些ID並使用它們(以保證唯一性)。 – 2014-09-27 23:49:13

+0

感謝您的諮詢。不幸的是我有很多碎片。 – skywall 2014-09-28 10:56:26

+1

@skywall你解決了我的問題,謝謝!由於我只有4片段,所以我遵循@MH。建議在'res/values/ids'中定義ID。 – li2 2015-08-07 02:57:34