6

如何从 xml 创建ListFragment(支持 v4 库的)布局ListFragment以编程方式设置它的布局,所以如果你想修改它,你需要弄乱添加/删除视图。

4

2 回答 2

14

我已将创建的布局转换为 xml,您可以添加/删除小部件或添加pulltorefresh解决方案。您不应该更改所需的 ID。由于某些小部件需要内部 id,因此需要调用辅助函数,并且它需要在支持 v4 命名空间中,因为常量是内部的,具有默认可见性。

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>

和中的类(ListFragmentLayoutandroid.support.v4.app你的项目中,你不需要修改支持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);
    }
}

在您扩展的片段中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;
}
于 2012-08-27T16:17:09.820 回答
-2

从 android sdk (ListFragment) ( http://developer.android.com/reference/android/app/ListFragment.html ):

public View onCreateView (LayoutInflater inflater, ViewGroup 容器, Bundle savedInstanceState)

提供默认实现以返回简单的列表视图。子类可以覆盖以替换为自己的布局。如果这样做,返回的视图层次结构必须有一个 ID 为 android.R.id.list 的 ListView,并且可以选择有一个兄弟视图 id android.R.id.empty,当列表为空时显示。

如果您使用自己的自定义内容覆盖此方法,请考虑在布局文件中包含标准布局 list_content,以便继续保留 ListFragment 的所有标准行为。特别是,这是目前显示内置不确定进度状态的唯一方法。

因此,当您想要自己的 layout.xml 用于 FragmentList 覆盖 onCreateView 并膨胀您自己的布局时。

例如:

创建一个 android 布局 ( yourlistlayout.xml ) 并将以下 xml 放在要显示 ListFragment 的位置。

    <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>

在您的ListFragment类中放入以下代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.yourlistlayout, null);       
    return v;       
}
于 2013-03-26T16:12:02.777 回答