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 インフレータ、ViewGroup コンテナ、Bundle savedInstanceState)
単純なリスト ビューを返すデフォルトの実装を提供します。サブクラスはオーバーライドして、独自のレイアウトに置き換えることができます。その場合、返されるビュー階層には、id が android.R.id.list である ListView が必要であり、オプションで、リストが空のときに表示される兄弟ビュー ID android.R.id.empty を持つことができます。
このメソッドを独自のカスタム コンテンツでオーバーライドする場合は、レイアウト ファイルに標準レイアウト list_content を含めることを検討してください。これにより、ListFragment のすべての標準動作が引き続き維持されます。特に、これは現在、組み込みの不確定な進行状況を表示する唯一の方法です。
そのため、FragmentList に独自の layout.xml が必要な場合は、onCreateView をオーバーライドして、独自のレイアウトを拡張します。
例えば:
Android レイアウト ( yourlistlayout.xml ) を作成し、ListFragment を表示する位置に次の xml を配置します。
<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;
}