3

ここで図1のように単純なリスト/詳細ビューを実装しようとしていますが、「コンテンツにはid属性が「android.R.id.list」であるListViewが必要です」というランタイム例外が発生します。このエラーは、結果の量に問題がある場合は詳細に議論されているようですが、ほとんどの答えは ListActivity を拡張することに関するもののようですが、私は ListFragment を拡張しています。これまでのところ、私はそれを修正することに運がありませんでした。基本アクティビティは次のとおりです。

SpeciesListActivity.java

public class SpeciesListActivity extends MenuItemActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_species_list);

        // Check if the species_detail view is available. If it is
        // we're running both fragments together.
        if (findViewById(R.id.species_detail) != null) {
        }
    }
}

フラグメントは、そのレイアウト ファイルを介して含まれています。

activity_species_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:baselineAligned="false"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment android:name="com.example.fragments.SpeciesListFragment"
            android:id="@+id/species_list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="net.gamebreeder.fragments.SpeciesDetailFragment"
            android:id="@+id/species_detail"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>

これは 2 つのペインのレイアウトです。1 つのペインのレイアウトは、2 番目のフラグメント (id species_detail) が含まれていないことを除いて同じです。

問題のフラグメント:

SpeciesListFragment.java

public class SpeciesListFragment extends ListFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_species_list, container, false);
    }
}

そしてフラグメントのレイアウト:

fragment_species_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="8dp"
    android:paddingRight="8dp">

    <ListView android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:drawSelectorOnTop="false"/>

    <TextView android:id="@id/android:empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/empty_string"/>

</LinearLayout>

ドキュメントによると、 onCreateView() をオーバーライドしないように SpeciesListFragment を変更して、強制的にデフォルトを使用しようとしました:

注: フラグメントが ListFragment のサブクラスである場合、デフォルトの実装では onCreateView() から ListView が返されるため、実装する必要はありません。

しかし、私はまだ得る: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

私が見つけた 1 つの質問は、メイン アクティビティで FragmentActivity を拡張していることを確認することを示唆しており、それがまさに MenuItemActivity です。

public class MenuItemActivity extends FragmentActivity {

これは基本的に単なるラッパーなので、すべてのアクティビティで手動でメニューを作成する必要はありません。

何か助けていただければ幸いです-単純なものが欠けていることを願っています。

編集 2013-06-27

fragment_species_list.xml の id を両方としてフォーマットしようとしました@id/android:list@android:id/list、どちらも機能しません。ドキュメントには使用するように書かれています@id/android:listが、私が読んだ他の質問は、両方が機能することを示唆しているようですが、両方でエラーが発生します。私も試してみまし@+id/listた。

また、以下の回答に基づいて以下を変更しました。

activity_species_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:baselineAligned="false"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment class="com.example.fragments.SpeciesListFragment"
            android:id="@+id/species_list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment class="net.gamebreeder.fragments.SpeciesDetailFragment"
            android:id="@+id/species_detail"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>
4

6 に答える 6

7

このインクルードをリスト レイアウトに追加します。

<include layout="@android:layout/list_content" />
<ListView 
    android:id="@+id/list" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white" />

これは私のために働いた....

Android サイトのドキュメント: http://developer.android.com/reference/android/app/ListFragment.html

public View onCreateView (LayoutInflater インフレータ、ViewGroup コンテナ、Bundle savedInstanceState)

API レベル 11 で追加されました。単純なリスト ビューを返すデフォルトの実装を提供します。サブクラスはオーバーライドして、独自のレイアウトに置き換えることができます。その場合、返されるビュー階層には、id が android.R.id.list である ListView が必要であり、オプションで、リストが空のときに表示される兄弟ビュー ID android.R.id.empty を持つことができます。

このメソッドを独自のカスタム コンテンツでオーバーライドする場合は、レイアウト ファイルに標準レイアウト list_content を含めることを検討してください。これにより、ListFragment のすべての標準動作が引き続き維持されます。特に、これは現在、組み込みの不確定な進行状況を表示する唯一の方法です。

于 2013-09-13T22:41:54.910 に答える
-2

fragment_species_list.xml は次のようになります。「@android/id:list」は「@id/android:list」にする必要があります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="8dp"
android:paddingRight="8dp">

<ListView android:id="@id/android:list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:drawSelectorOnTop="false"/>

<TextView android:id="@id/android:empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="@string/empty_string"/>

</LinearLayout> 
于 2013-06-26T18:25:08.230 に答える
-3

ur fragment_species_list.xml を確認してください。

 <ListView android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:drawSelectorOnTop="false"/>

あなたのリストビューでは、IDは android:id="@+id/list" である必要があります

于 2013-06-26T18:22:22.830 に答える