Reputation:
I am getting this error:
Caused by: java.lang.RuntimeException:
Your content must have a ListView whose id attribute is 'android.R.id.list'
This is HomeScreen.java:
public class HomeScreen extends ListActivity {
String TAG = AppConstants.TAG;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
CBasicInfo basicinfo_data[] = new CBasicInfo[]
{
new CBasicInfo("Projet A", 1, new Date()),
new CBasicInfo("Projet A", 2, new Date()),
new CBasicInfo("Projet A", 3, new Date()),
new CBasicInfo("Projet A", 4, new Date()),
new CBasicInfo("Projet A", 5, new Date())
};
BasicInfoAdapter adapter = new BasicInfoAdapter(this, R.layout.home_screen_list_item, basicinfo_data);
ListView list_view = (ListView)findViewById(R.id.lvSavedProjects);
list_view.setAdapter(adapter);
}
}
And here my adapter BasicInfoAdapter.java:
public class BasicInfoAdapter extends ArrayAdapter<CBasicInfo>{
Context context;
int layoutResourceId;
CBasicInfo data[] = null;
public BasicInfoAdapter(Context context, int layoutResourceId, CBasicInfo[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
BasicInfoHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new BasicInfoHolder();
holder.txtName = (TextView)row.findViewById(R.id.tvHomeScreenProjectName);
holder.txtPid = (TextView)row.findViewById(R.id.tvHomeScreenPid);
holder.txtDDate = (TextView)row.findViewById(R.id.tvHomeScreenDownloadDate);
row.setTag(holder);
}
else
{
holder = (BasicInfoHolder)row.getTag();
}
CBasicInfo bi = data[position];
holder.txtName.setText(bi.getName());
holder.txtPid.setText(bi.getId());
holder.txtDDate.setText(bi.getExportDate().toString());
return row;
}
static class BasicInfoHolder
{
TextView txtName;
TextView txtPid;
TextView txtDDate;
}
}
My home.xml is:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lbl_saved_projects"
android:textAppearance="?android:attr/textAppearanceLarge" />
<ListView
android:id="@+id/lvSavedProjects"
android:name="android.app.ListFragment"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="0.86" />
<Button
android:id="@+id/bDownloadMoreProjects"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/lbl_download_more_projects" />
</LinearLayout>
What the heck am I doing wrong here?
Thx
EDIT:
The stack trace shows:
FATAL EXCEPTION: main
android.content.res.Resources$NotFoundException: String resource ID #0x1
at android.content.res.Resources.getText(Resources.java:247)
at android.widget.TextView.setText(TextView.java:3473)
at com.snip.tnc.SnipForAndroid.BasicInfoAdapter.getView(BasicInfoAdapter.java:48)
at android.widget.AbsListView.obtainView(AbsListView.java:2033)
at android.widget.ListView.makeAndAddView(ListView.java:1772)
at android.widget.ListView.fillDown(ListView.java:672)
at android.widget.ListView.fillFromTop(ListView.java:732)
at android.widget.ListView.layoutChildren(ListView.java:1625)
at android.widget.AbsListView.onLayout(AbsListView.java:1863)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Upvotes: 1
Views: 1994
Reputation: 48871
As K-Ballo points out, the layout for a ListActivity
must have a ListView
with id android.R.id.list
. The first part (android.R
) translates to @android:
and the second to id/list
so...
Set the id of you ListView
to be @android:id/list
. and it will automatically be used.
You then should delete the line where you use findViewById(...)
(not necessary for a ListActivity
). Then you just use...
setListAdapter(adapter);
You don't need to find the ListView
to set the Adapter
as the above method that ListActivity
exposes does it automatically.
If you do need the ListView
for other purposes, however, use...
getListView();
Upvotes: 1
Reputation: 81349
The error is quite clear:
Your content must have a ListView whose id attribute is 'android.R.id.list'
so it seems you don't have one at R.layout.home
. By the way, your problem has nothing to do with Adapter
s but with ListActivity
.
The ListView
in your layout should have this as its id
attribute:
android:id="@android:id/list`
I'm not sure what your android:name
attribute is doing there.
Upvotes: 2