2012-10-16 25 views
9

Tôi gặp vấn đề với bố cục phân mảnh và tôi chân thành xin lỗi nếu nó đã được trả lời trước đó và tôi quá câm để tìm thấy nó. Tôi đã tìm kiếm hàng giờ và không có gì (tốt, tôi đã nhận được rất nhiều nhưng không có gì giải quyết được vấn đề của tôi).Phím quay lại trên phân đoạn được thêm theo chương trình Đoạn mã dẫn đến vùng chứa trống

Vì vậy, đây là thiết lập của tôi: Tôi có bố cục hai ngăn bằng cách sử dụng hai FrameLayouts làm vùng chứa cho các đoạn của tôi. activity_listing.xml:

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

On mở ứng dụng (onCreate trong hoạt động của fragment) một đoạn gọi là Liệt kê được thêm vào FrameLayout "danh sách" lập trình sử dụng một 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 này được thay thế một vài lần trong thời gian chạy, vì vậy tôi phải tạo nó thay vì xác định nó trong XML. Tôi đã thử cách sau với

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

nhưng sau đó nó sẽ không bị thay thế hoặc bị xóa theo chương trình sau này. Tôi chỉ có thể thêm() và sau đó cái cũ được hiển thị thông qua cái mới. Nhưng đó không phải là vấn đề ở đây - chỉ là một lời giải thích cho con đường của tôi.

Cho đến nay tất cả điều này hoạt động như nó cần, Danh sách được tạo và hiển thị v.v., do đó, không có vấn đề gì ở đó. Nhưng:

Khi ListingFragment được hiển thị khi khởi động và tôi nhấn phím quay lại, ở vị trí cuối cùng, FrameLayout "listing" được dọn sạch thay vì thả trở lại Màn hình chính! Tôi đã biết rằng nó phải là do onCreate của ListingActivity của tôi, tôi hiển thị một khung trống và thêm() một ListingFragment vào nó. Vì vậy, ngăn xếp trở lại có khung trống trong đó. Đúng?

tôi đã cố gắng giải quyết tình hình bằng cách này để ListingActivity:

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

Nhưng bằng cách nào đó mà không nhìn hoặc cảm thấy đúng ... nó trông giống như một tác phẩm xấu xung quanh.

Vì vậy, có cách nào để chèn đoạn trước khi xem với FrameLayout trống được tăng cao để không có trạng thái trống để "quay lại"? Hoặc là nó có thể loại bỏ trạng thái "trống rỗng" từ ngăn xếp lại mặc dù nó không có trong nó? Bất kỳ ý tưởng nào khác về cách tránh khung trống sau khi nhấn "quay lại"?

Cảm ơn bạn rất nhiều vì nỗ lực của bạn trước!

+2

thử xóa "ft.addToBackStack (null)" khỏi giao dịch thêm trong onCreate của bạn. sau đó bạn không cần phải làm bất cứ điều gì với onbackpressed – toadzky

+0

Bạn là đúng! Hoàn hảo! Bạn có thể xin vui lòng gửi nó như là một câu trả lời để tôi có thể đánh dấu nó như là một trong những quyền? Tôi thực sự cảm thấy một chút câm ... –

Trả lời

11

Đừng gọi ft.addToBackStack(null) khi bạn thêm Phân đoạn vào lúc tạo. Điều đó nói với FragmentManger rằng bạn có một trạng thái khác TRƯỚC KHI phân đoạn mà bạn muốn có thể quay lại.

Các vấn đề liên quan