0

HashMapsのArrayListを取得して、機能するListAdapterを取得しようとしています。これを実行すると、

java.lang.RuntimeException: Your content must have a ListView whose id attribute is android.R.id.list

エラー。これが私が持っているものです:

gameListは、データを取得する場所です。

gameList.toString() returns: [{turn=1, opponent=UserTwo, streak=4, hintX=1234, player=UserOne, solution=MySolution, hintY=5678}, {turn=0, opponent=UserThree, streak=12, hintX=1344, player=UserOne, solution=SolutionTwo, hintY=5428}]

私のListActivityクラス:

public class GameListActivity extends ListActivity{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_list);

    String GAME_ITEM = "game";
    String PLAYER_ITEM = "player";
    String OPPONENT_ITEM = "opponent";
    String SOLUTION_ITEM = "solution";
    String HINTX_ITEM = "hintX";
    String HINTY_ITEM = "hintY";
    String STREAK_ITEM = "streak";
    String TURN_ITEM = "turn";

ArrayList<HashMap<String, String>> gameList = new ArrayList<HashMap<String, String>>();
AppVars gameVars = ((AppVars) getApplicationContext());
gameList = gameVars.getState();

String[] keyList = new String[] { OPPONENT_ITEM, STREAK_ITEM, TURN_ITEM };

ListAdapter adapter = new SimpleAdapter(this, gameList, R.layout.game_list_item, 
                        keyList, 
                        new int[] {R.id.opponent, R.id.streak, R.id.turn});
setListAdapter(adapter);        

}   

XML:

game_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5dp" >

    <ImageView
        android:id="@+id/thumbnail"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:src="@android:drawable/alert_dark_frame" />

    <TextView
        android:id="@+id/opponent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_centerHorizontal="true"
        android:text="Entry"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/streak"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/thumbnail"
        android:layout_centerHorizontal="true"
        android:text="Streak"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/turn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/streak"
        android:layout_centerHorizontal="true"
        android:text="Your turn!"
        android:textSize="20sp" />

</RelativeLayout>

game_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/blackboard" >

    <ListView
        android:id="@+id/gameList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

</RelativeLayout>
4

5 に答える 5

1

java.lang.RuntimeException:コンテンツには、id属性がandroid.R.id.listであるListViewが必要です。

したがって、エラーログはすべてを教えてくれます

XMLあなたはあなたのファイルに追加する必要がありますListView android.R.id.list

<ListView
   android:id="@android:id/list"
   // next attributes
/>

Activityから拡張する場合ListActivityは、これを使用する必要があります。

これがドキュメントからの情報です

ListActivityには、画面の中央にある単一の全画面リストで構成されるデフォルトのレイアウトがあります。ただし、必要に応じて、onCreate()のsetContentView()を使用して独自のビューレイアウトを設定することにより、画面レイアウトをカスタマイズできます。これを行うには、独自のビューにIDが「@ android:id / list」(またはコード内の場合はリスト)のListViewオブジェクトが含まれている必要があります

したがって、詳細については、ListActivityを参照してください。

于 2012-06-15T18:14:16.723 に答える
1
  • あなたがするときそれを気にしなさいextends ListActivity Then your xml file must have listview which id is @android:id/list

使用する@android:id/list

  <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>
于 2012-06-15T18:16:27.760 に答える
1

拡張ListActivityしているので、ビューにはID「list」で定義されたリストが必要です。

実例については、このリンクを参照してください。

于 2012-06-15T18:16:44.007 に答える
1

リストのIDは「@+id / gameList」@android:id/listです。使用しているので、「」である必要があります。ListActivity...

于 2012-06-15T18:17:27.290 に答える
0

コードから次の行を削除します。

setContentView(...)

ListActivityがを処理するので、 usingListViewにアクセスできます。代わりに、より複雑なレイアウトサブクラスが必要な場合。ListViewthisActivity

于 2012-06-15T18:34:55.980 に答える