2016-02-20 73 views
1

我有以下片段設置:片段未顯示在視圖重複動態最多加入片段

12是分別含有AB片段標籤。 A中有一個按鈕,點擊後會顯示C

正常工作:在第一個標籤1中,A通過xml靜態添加。點擊該按鈕後,C啓動正常,並按下後退按鈕讓我回到A

|__1__| 2 | 
| A | B | 
    ↓ 
| C | 

失敗:在B,存在動態打開A的按鈕。現在按上圖所示按A中的同一個按鈕,但在此視圖中,C失敗顯示出來。我可以在adb中看到數據加載正常,但不知何故它不在視圖中。

| 1 |__2__| 
| A | B | 
     ↓ 
     | A | 
     ↓ 
     | C | 

我對按鈕的代碼從AC是:

@Override 
public void onReshareTextClick(View v, int position) { 
    this.getFragmentManager().beginTransaction().replace(R.id.feedContent, 
      LikeReshareFragment.newInstance(feedAdapter.getFeedItem(position), Utils 
        .FragmentType.Reshare)) 
        .addToBackStack(null).commit(); 
} 

代碼BA是:

@Override 
public void onPhotoClick(View v, int position) { 
    this.getFragmentManager().beginTransaction().replace(R.id.llMySnaps, 
      FeedFragment.getInstance(sharedFeedItems)) 
      .addToBackStack(null).commit(); 
} 

問題:既然有兩個碎片ts同名,我懷疑這條線有問題replace(R.id.feedContent,..在標籤2。它可能實際上替換1(不可見)中的A而不是標籤2中的那個。這是正確的和/或如何解決這個問題?

更新 我可以確認上述說法。 C實際上顯示在標籤1。這是爲什麼發生?因爲,android有兩個A(常量ID爲R.id.feedContent)可供選擇,我如何明確使用B啓動的那個?

回答

0

問題在於Android在R.id.feedContent上執行DFS以查找要在事務中替換的視圖。

解決方案 通過編程方式分配一個ID的看法,我能夠找到 正確的觀點來代替。

設置視圖ID:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_feed, container, false); 
    CoordinatorLayout coordinatorLayout = (CoordinatorLayout) view.findViewById(R.id.feedContent); 
    coordinatorLayout.setId(feedID+10); // here feedID is what differentiates the two feed fragments 

    return view; 
} 

這裏是更換片段呼叫:

this.getFragmentManager().beginTransaction().replace(feedID+10, openPostFragment) 
       .addToBackStack(null).commit();