如何从 xml 创建ListFragment(支持 v4 库的)布局?
ListFragment
以编程方式设置它的布局,所以如果你想修改它,你需要弄乱添加/删除视图。
2 回答
我已将创建的布局转换为 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>
和中的类(ListFragmentLayout
在android.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;
}
从 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;
}