2012-08-30 26 views
9

Tôi có một ListFragment nơi tôi sử dụng một bộ điều hợp tùy chỉnh để cư trú trong listview. Tất cả đều tốt cho đến khi tôi thay đổi hướng và cuộn. Sau đó, có vẻ như sau: ListView after a few orientation changesSao chép các hàng listview trong phân đoạn danh sách theo hướng thay đổi

Tôi đoán nó có liên quan đến việc dò dẫm người xem nhưng tôi không thể truy cập mã ngay bây giờ.

+0

bản sao có thể có của [Chế độ xem danh sách Android ListFragment chồng chéo lên thay đổi hướng) [http://stackoverflow.com/questions/11209412/android-listfragment-list-view-overlapping-on-orientation-change) – Qw4z1

Trả lời

14

Các lý do của bạn đoạn chồng chéo là tôi sử dụng FrameLayout và thêm đoạn với FragmentTransition.add (...). Khi tôi thay đổi .add() thành .replace() đoạn cũ đã bị loại bỏ và đoạn mới được thêm vào và vấn đề của tôi đã được giải quyết.

0

Thay đổi định hướng gây onCreate để khởi động lại, trừ khi bạn bao gồm phương pháp này

public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
} 

và đặt này trong phần hoạt động của manifest

android:configChanges="orientation" 
+0

Có, nhưng câu hỏi là lý do tại sao nó chồng lên bố cục cũ. Và câu trả lời cho câu hỏi đó nằm trong câu hỏi trùng lặp. Cảm ơn cho mẹo anyway! – Qw4z1

2

Tôi có vấn đề tương tự và theo đó tôi đang nói về giải pháp: - bạn đang bị mờ bởi vì mỗi khi định hướng thay đổi một nơi nào đó dụ mới của listfragment được tạo ra (có thể là trong oncreate()) bạn phải chỉ tạo một thể hiện của phân đoạn danh sách một lần và thay đổi hướng thay thế mảnh đó thay vì thêm lần nữa.

0

Kiểm tra xem đây có phải là lần đầu tiên tạo ra() được gọi là, nói cách khác, xác định xem cuộc gọi lại không phải do xoay màn hình hay không.

protected void onCreate(Bundle savedInstanceState) { 
     if(savedInstanceState == null) { 
    // transition.add(Your fragment,...) 
    } 
} 
0

tôi đã cùng một vấn đề, và nó vì sử dụng FrameLayout, Trước tiên, bạn phải kiểm tra xem đoạn của bạn đã thêm vào hoạt động:

String TagName = "F"; 

Thêm một đoạn mà không một giao diện người dùng Nếu bạn muốn nhận được mảnh từ hoạt động sau này, bạn cần phải sử dụng findFragmentByTag(). "Google" http://developer.android.com/guide/components/fragments.html#Adding

Fragement F = getFragmentManager().findFragmentByTag(TagName); 

Sau đó kiểm tra

if(F == null) { 
    F = new F(); 
    getFragmentManager() 
    .beginTransaction() 
    .add(R.id.container, F, TagName) 
    .commit(); 
} 

mục tiêu ở đây là để tránh thêm hoặc tạo ra trường hợp mới của mảnh, mà vẫn tồn tại trong quá trình thay đổi cấu hình mà gây ra vấn đề khi sử dụng FrameLayout làm vùng chứa.

Giải pháp 2 (Đơn giản): Điều duy nhất bạn phải làm ở đây là thay đổi vùng chứa của bạn thành cũ: LinearLayout, và thế là xong. nhưng theo ý kiến ​​của tôi, đây không phải là giải pháp tốt nhất vì nhiều trường hợp của đoạn.

Hy vọng trợ giúp này;

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