1

我正在玩 Monodroid,试图在启动时将适配器设置为列表视图。我在屏幕上有一堆控件,我想做的是当单击按钮时,一个项目进入列表视图。

我没有从调试器中得到任何错误,只是“不幸的是 Application1 已停止”,这使得我很难弄清楚我做错了什么。

这是我的代码:

public class Activity1 : Activity
{
    List<string> items = new List<string>();
    ArrayAdapter<string> adaptor;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Main);
        int i = 0;

        items.Add("Hello world");
        adaptor = new ArrayAdapter<string>(this,
            Resource.Id.listView1,
            items);

        Button button = FindViewById<Button>(Resource.Id.button1);
        ListView listView = FindViewById<ListView>(Resource.Id.listView1);
        listView.SetAdapter(adaptor);

        button.Click += delegate
        {
            items.Add("Hello " + ++i);
            adaptor.NotifyDataSetChanged();
        };
    }
}

根据评论,我发现设备日志包含以下内容:

android.content.res.Resources$NotFoundException: Resource ID #0x7f050003 type #0x12 is not valid

这是 Resource.Designer.cs 中列表视图的 ID

public const int listView1 = 2131034115;

列表视图声明如下:

    <ListView
        p1:minWidth="25px"
        p1:minHeight="25px"
        p1:layout_width="wrap_content"
        p1:layout_height="fill_parent"
        p1:id="@+id/listView1"
        p1:layout_marginBottom="70dp" />
4

2 回答 2

2

我在阅读文档后想通了。实例化 ArrayAdapter 时,它必须参考 Android.Resource.Layout.SimpleListItem1 或其他列表项资源,而不是列表视图本身。

于 2012-11-01T22:06:23.027 回答
0

我对这段代码有同样的问题:

mForecastAdapter =
    new ArrayAdapter<String>(
                    this,
                    android.R.layout.mymain,
                   R.id.list_view_forecast, 
                    foreCastArray
    );

然后看了你的帖子,我把它改成了:

 mForecastAdapter =
     new ArrayAdapter<String>(
                    this,
                    android.R.layout.simple_list_item_1,
                   // R.id.list_view_forecast, 
                    foreCastArray
     );

使用了简单的列表视图删除了列表视图 ID。这行得通。

于 2015-05-04T02:23:47.480 回答