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 インフレータ、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;       
}
于 2013-03-26T16:12:02.777 に答える