Reputation: 1315
I'm trying to get my ArrayList of HashMaps to try to get a working ListAdapter. When I run this, I'm getting a
java.lang.RuntimeException: Your content must have a ListView whose id attribute is android.R.id.list
error. Here's what I have:
gameList is where I'm getting my data from:
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}]
My ListActivity class:
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>
Upvotes: 0
Views: 143
Reputation: 13474
Remove the following line from your code:
setContentView(...)
ListActivity handles the ListView
for you so you access the ListView
using this
.
If you need a more complex layout subclass Activity
instead.
Upvotes: 0
Reputation: 33505
java.lang.RuntimeException: Your content must have a ListView whose id attribute is android.R.id.list
So error log tells you everything
You need to add to your XML
file of ListView
android.R.id.list
<ListView
android:id="@android:id/list"
// next attributes
/>
Exactly when your Activity
extends from ListActivity
, you should to use this.
Here is info from docs
ListActivity has a default layout that consists of a single, full-screen list in the center of the screen. However, if you desire, you can customize the screen layout by setting your own view layout with setContentView() in onCreate(). To do this, your own view MUST contain a ListView object with the id "@android:id/list" (or list if it's in code)
So for more information have look at ListActivity.
Upvotes: 1
Reputation: 15701
id of list is "@+id/gameList" should be "@android:id/list
" as you are using ListActivity...
Upvotes: 1
Reputation: 66637
You are extending ListActivity
, so your view should have list defined with id "list"
See this link for working example.
Upvotes: 1
Reputation: 40416
extends ListActivity Then your xml file must have listview which id is
@android:id/list
.USe @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>
Upvotes: 1