2012-10-16 29 views
9

我有一個分散佈局的問題,我真誠道歉,如果它已被回答之前,我太愚蠢,找不到它。我搜索了幾個小時,沒有得到任何東西(好吧,我有很多,但沒有解決我的問題)。以編程方式添加的返回鍵片段導致空容器

所以這裏是我的設置:我有兩個窗格佈局使用兩個FrameLayouts作爲我的片段的容器。 activity_listing.xml:

<FrameLayout android:id="@+id/listing" /> 
<FrameLayout android:id="@+id/details" /> 

在打開的應用程序(的onCreate片段中的活動)被稱爲上市片段被添加到FrameLayout裏「掛牌」程序使用FragmentTransaction。

public class ListingActivity extends FragmentActivity 
     implements ListingFragment.Callbacks { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_listing); 

    // Displaying the first listing here ... 
    Fragment fragment = new ListingFragment(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.listing, fragment); 
    ft.addToBackStack(null); 
    ft.commit(); 
    ... 
} 

這ListingFragment運行期間更換了幾次,所以我必須要創造,而不是它的XML定義它的。我嘗試後者與

<fragment android:name="com.example.app.ListingFragment" /> 

但它然後不會被編程更換或刪除。我只能添加(),然後舊的可以通過新的可見。但這不是問題 - 只是我的解釋。

到目前爲止,所有這些工作都應該如此,列表創建和顯示等等,所以沒有問題。但是:

當啓動時顯示ListingFragment並按下後退鍵時,在最後一個位置FrameLayout「listing」被清空,而不是返回到主屏幕!我想它必須是因爲我的ListingActivity的onCreate,我顯示一個空框架並向它添加()一個ListingFragment。所以後面的堆棧也有空框架。對?

我試圖解決這一情況,以ListingActivity:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    if(getSupportFragmentManager().getBackStackEntryCount() == 0) { 
     this.finish(); 
    } 
} 

但不知何故,這不看或感覺不對......它看起來像一個糟糕的解決辦法。

那麼有沒有什麼方法可以在視圖之前插入片段,使空的FrameLayout被充滿,所以沒有空狀態「返回」?或者是否有可能從後端堆棧中刪除「空」狀態,即使它不在其中?任何其他想法如何避免「後退」後的空框架?

非常感謝您的努力提前!

+2

嘗試從您的onCreate中的添加事務中刪除「ft.addToBackStack(null)」。那麼你不應該做任何事情onbackpressed – toadzky

+0

你是對的!完善!您能否將它作爲答案發布,以便我可以將其標記爲正確的答案?我現在真的覺得有點笨... –

回答

11

在onCreate中添加片段時,不要調用ft.addToBackStack(null)。這告訴FragmentManger你有一個你想要跳回的片段之前的另一個狀態。

相關問題