Как создать ListFragment (из библиотеки поддержки v4) макет из xml? ListFragment
настраивает свой макет программно, поэтому, если вы хотите изменить его, вам нужно возиться с добавлением/удалением представления.
Макет ListFragment из xml
Ответы (2)
Я преобразовал созданный макет в xml, вы можете добавлять/удалять свои виджеты или, например. добавить pulltorefresh
решения. Вы не должны менять необходимые идентификаторы. Из-за внутренних идентификаторов, необходимых для некоторых виджетов, необходимо вызвать вспомогательную функцию, и она должна находиться в пространстве имен поддержки 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)
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;
}
The field ListFragment.INTERNAL_EMPTY_ID is not visible
- person Maksim Dmitriev; 26.04.2013
view.findViewById(R.id.mybutton).setOnClieckListener()
до return view
?
- person sherpya; 16.07.2014
Из Android SDK (ListFragment) (http://developer.android.com/reference/android/app/ListFragment.html):
общедоступное представление onCreateView (расширитель LayoutInflater, контейнер ViewGroup, Bundle saveInstanceState)
Предоставьте реализацию по умолчанию, чтобы вернуть простое представление списка. Подклассы могут переопределять, чтобы заменить их собственным макетом. В этом случае возвращаемая иерархия представлений должна иметь ListView с идентификатором android.R.id.list и, при необходимости, может иметь идентификатор родственного представления 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;
}