Android ListView的自定义适配器导致错误
我得到这个错误:Android ListView的自定义适配器导致错误,android,android-listview,android-arrayadapter,Android,Android Listview,Android Arrayadapter,我得到这个错误: Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 这是HomeScreen.java: public class HomeScreen extends ListActivity { String TAG = AppConstants.TAG; @Override
Caused by: java.lang.RuntimeException:
Your content must have a ListView whose id attribute is 'android.R.id.list'
这是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);
}
}
这里是我的适配器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;
}
}
错误很明显: 您的内容必须具有id属性为“android.R.id.list”的ListView 看来你在
R.layout.home
上没有。顺便说一下,您的问题与适配器
s无关,而是与列表活动
有关
布局中的ListView
应将此作为其id
属性:
android:id="@android:id/list`
我不确定你的
android:name
属性在那里做什么。正如K-Ballo指出的那样,ListActivity
的布局必须有一个id为android.R.id.list的ListView
。第一部分(android.R
)翻译成@android:
,第二部分翻译成id/list
,所以
将您的idListView
设置为@android:id/list
。它将自动被使用
然后,您应该删除使用findViewById(…)
的行(对于列表活动不需要)。那你就用
setListAdapter(adapter);
您不需要找到ListView
来设置Adapter
,因为上面的ListActivity
方法会自动进行设置
但是,如果出于其他目的需要列表视图
,请使用
getListView();
当我将其更改为该值时,会出现以下错误:android.content.res.Resources$NotFoundException:String resource ID#0x1
@Eric:您从哪里获得该值?我已经在上面添加了堆栈跟踪。@Eric:这是由一个setText
方法调用引起的,可能是以getId()
为参数的调用。如果您想要一个具有此类id值的字符串,那么应该在setText(Integer.toString(bi.getId())行中执行一些操作代码>成功了setText(Integer.toString(bi.getId())代码>谢谢您的帮助。:)是的,做了所有这些,仍然得到了android.content.res.Resources$NotFoundException:String resource ID#0x1
。我在上面添加了一个堆栈跟踪。也许这有助于解决这个问题?
setListAdapter(adapter);
getListView();