Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView的自定义适配器导致错误_Android_Android Listview_Android Arrayadapter - Fatal编程技术网

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
,所以

将您的id
ListView
设置为
@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();