2012-08-02 34 views
6

Cách tạo ListFragment (trong thư viện hỗ trợ v4) bố cục từ xml? ListFragment thiết lập bố cục của nó theo lập trình, vì vậy nếu bạn muốn sửa đổi nó, bạn cần phải gây rối với chế độ xem thêm/xóa.Bố cục ListFragment từ xml

+0

Vui lòng chỉnh sửa vì vậy nó rõ ràng những gì vấn đề là (gửi nó như là một câu hỏi) và đưa các giải pháp dưới đây trong phần câu trả lời . –

+0

bạn có ví dụ để tham khảo không? – sherpya

+0

Bài đăng chỉ ở dạng câu hỏi và câu trả lời. Điều này trông giống như một giải pháp, nhưng không rõ câu hỏi ban đầu là câu trả lời. –

Trả lời

14

Tôi đã chuyển đổi bố cục đã tạo thành xml, bạn có thể thêm/xóa tiện ích của mình hoặc ví dụ: thêm các giải pháp pulltorefresh. Bạn không nên thay đổi các id cần thiết. Do các id nội bộ cần thiết cho một số tiện ích cần phải được gọi và cần phải có trong không gian tên hỗ trợ v4 vì các hằng số nằm bên trong với khả năng hiển thị mặc định.

list_loader.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:id="@+id/progress_container_id" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:visibility="gone" > 

     <ProgressBar 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <FrameLayout 
     android:id="@+id/list_container_id" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
      android:id="@+id/empty_id" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" /> 

     <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:drawSelectorOnTop="false" > 
     </ListView> 
    </FrameLayout> 
</FrameLayout> 

và lớp ListFragmentLayout trong android.support.v4.app (trong dự án của bạn, bạn không cần phải sửa đổi hỗ trợ v4 jar)

package android.support.v4.app; 

import your.package.R; 
import android.view.View; 

public class ListFragmentLayout 
{ 
    public static void setupIds(View view) 
    { 
     view.findViewById(R.id.empty_id).setId(ListFragment.INTERNAL_EMPTY_ID); 
     view.findViewById(R.id.progress_container_id).setId(ListFragment.INTERNAL_PROGRESS_CONTAINER_ID); 
     view.findViewById(R.id.list_container_id).setId(ListFragment.INTERNAL_LIST_CONTAINER_ID); 
    } 
} 

trong đoạn của bạn kéo dài ListFragment

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.list_loader, container, false); 
    ListFragmentLayout.setupIds(view); 
    return view; 
} 
+0

bạn có nghĩa là với những thay đổi này, nó sẽ hoạt động như thể nó không phải là chế độ xem tùy chỉnh? – seb

+0

bạn là người đàn ông tuyệt vời! – seb

+0

Không hiệu quả với tôi. Có vẻ như tôi đang sử dụng phiên bản cũ hơn của lib hỗ trợ. Nó thậm chí không chứa lớp ListFragmentLayout. Tôi không đề nghị sử dụng phương pháp này. Trong các phiên bản sau của lib hỗ trợ, nó có thể không hoạt động. – WindRider

-2

Từ androi d sdk (ListFragment) (http://developer.android.com/reference/android/app/ListFragment.html):

công khai Xem onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

Cung cấp thực hiện mặc định để trở lại một cái nhìn danh sách đơn giản. Các lớp con có thể ghi đè để thay thế bằng bố cục của riêng chúng. Nếu làm như vậy, hệ thống phân cấp chế độ xem trả lại phải có một ListView có id là android.R.id.list và có thể tùy chọn có id chế độ xem anh hùng android.R.id.empty sẽ được hiển thị khi danh sách trống.

Nếu bạn đang ghi đè phương pháp này bằng nội dung tùy chỉnh của riêng mình, hãy xem xét bao gồm layout_content tiêu chuẩn bố trí trong tệp bố cục của bạn để bạn tiếp tục giữ lại tất cả các hành vi chuẩn của ListFragment. Đặc biệt, đây là cách duy nhất để có trạng thái tiến trình không xác định được xây dựng trong được hiển thị.

Vì vậy, khi bạn muốn layout.xml của riêng bạn cho một FragmentList overideCreateView và tăng bố cục của riêng bạn.

Ví dụ:

Tạo một bố cục android (yourlistlayout.xml) và đặt xml sau trên vị trí mà bạn muốn hiển thị ListFragment của bạn.

<ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" > 
    </ListView> 

trong ListFragment lớp học của bạn đặt đoạn mã sau:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.yourlistlayout, null);  
    return v;  
} 
+0

điều này sẽ không hoạt động với thư viện hỗ trợ vì id khác nhau – sherpya

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