Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Your content must have a ListView whose id attribute is android.R.id.list

Tags:

I'm getting this run-time error and I'm really struggling to get to the bottom of it: "Your content must have a ListView whose id attribute is android.R.id.list".

Here is my code:

public class ShowAllJobsInArea extends ListActivity{      Context context;      public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.show_jobs_in_area);         context=getApplicationContext();          String area=Cookie.getAreaSelected();          final ProgressBar thinger=(ProgressBar) findViewById(R.id.progressBar2);         TabHost tabHost=(TabHost)findViewById(android.R.id.tabhost);         tabHost.setup();          TabSpec spec1=tabHost.newTabSpec("Tab 1");         spec1.setContent(R.id.tab1);         spec1.setIndicator("Starting");          TabSpec spec2=tabHost.newTabSpec("Tab 2");         spec2.setContent(R.id.tab2);         spec2.setIndicator("# Days");                  TabSpec spec3=tabHost.newTabSpec("Tab 3");         spec3.setContent(R.id.tab3);         spec3.setIndicator("Rate");           tabHost.addTab(spec1);         tabHost.addTab(spec2);         tabHost.addTab(spec3);          Handler handler = new Handler() {              public void handleMessage(Message message) {                   switch (message.what) {                       case HttpConnection.DID_START:                           thinger.setVisibility(View.VISIBLE);                           break;                       case HttpConnection.DID_SUCCEED:                           String response = (String) message.obj;                           Log.i("EOH",response);                            ArrayList<String> startDates=new ArrayList<String>();                           ArrayList<String> ns=new ArrayList<String>();                           ArrayList<String> rates=new ArrayList<String>();                           HashMap<String, JSONObject> countyObjs=new HashMap<String, JSONObject>();                            JSONObject object = null;                           try {                               object = (JSONObject) new JSONTokener(response).nextValue();                                for(int i=0;i<object.length();i++){                                   String area="";                                   String endDate="";                                   String endTimes="";                                   String id="";                                   String startDate="";                                   String startTimes="";                                   String rate="";                                   String alreadyApplied="";                                   String n="";                                   JSONObject countyObj=object.getJSONObject(String.valueOf(i));                                   countyObjs.put(id, countyObj);                                    area=countyObj.getString("area");                                   endDate=countyObj.getString("endDate");                                   endTimes=countyObj.getString("endTimes");                                   id=countyObj.getString("id");                                   startDate=countyObj.getString("startDate");                                   startTimes=countyObj.getString("startTimes");                                   rate=(countyObj.getString("rates").split(","))[0];                                   alreadyApplied=countyObj.getString("alreadyApplied");                                   n=countyObj.getString("n");                                    startDates.add(startDate+","+id);                                   ns.add(n+","+id);                                   rates.add(rate+","+id);                               }                           }catch (JSONException e) {                               e.printStackTrace();                           }                            Collections.sort(startDates);                           Collections.sort(ns);                           Collections.sort(rates);                                                String[] startDates_str = new String[startDates.size()];                           startDates.toArray(startDates_str);                            setListAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, startDates_str));                           //setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));                           ListView lv = getListView();                           lv.setTextFilterEnabled(true);                              thinger.setVisibility(View.INVISIBLE);                            break;                       case HttpConnection.DID_ERROR:                           thinger.setVisibility(View.INVISIBLE);                           break;                       default:                           break;                   }              }         };          List<NameValuePair> params = new ArrayList<NameValuePair>(1);         params.add(new BasicNameValuePair("area", area));          new HttpConnection(handler).post("http://www.xlhi.com/ajax/getJobsInArea.php",params);     } } 

show_jobs_in_area.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">     <TabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent">         <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">             <TabWidget android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/tabs"></TabWidget>             <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@android:id/tabcontent">                 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tab1" android:orientation="vertical">                     <ProgressBar android:id="@+id/progressBar2" android:layout_height="wrap_content" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="25dip"></ProgressBar>                     <ListView android:id="@+id/listView1" android:layout_height="wrap_content" android:layout_width="match_parent"></ListView>                 </LinearLayout>                 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tab2"></LinearLayout>                     <ListView android:id="@+id/listView2" android:layout_height="wrap_content" android:layout_width="match_parent">                 </ListView>                 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tab3">                     <ListView android:id="@+id/listView3" android:layout_height="wrap_content" android:layout_width="match_parent"></ListView>                 </LinearLayout>             </FrameLayout>         </LinearLayout>     </TabHost> </LinearLayout> 

list_item.xml:

<?xml version="1.0" encoding="utf-8"?> <TextView      xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:padding="10dp"     android:textSize="16sp" > </TextView> 

I've tried changing the id to android.id="@android:id/list" to no avail - still getting the same error. I was thinking it's something to do with the asynchronous request I'm doing... I'm really stuck now and hope someone can help.

Many thanks in advance,

like image 312
Eamorr Avatar asked Jul 11 '11 08:07

Eamorr


2 Answers

If you have more than one ListView in your layout you should not extend ListActivity but rather extend Activity and handle the ListViews yourself like;

ListView list1 = (ListView) findViewById(R.id.myList1); list1.setAdapter(...);  ListView list2 = (ListView) findViewById(R.id.myList2); list2.setAdapter(...); 

ListActivity is a shorthand helper class that makes life easier when you are working with only one ListView in your layout.

like image 73
Karl-Bjørnar Øie Avatar answered Nov 17 '22 13:11

Karl-Bjørnar Øie


In you show_jobs_in_area.xml one of the list id to:

A good example is here Listview error: "Your content must have a ListView whose id attribute is 'android.R.id.list'"

like image 29
Mathayo Avatar answered Nov 17 '22 13:11

Mathayo