如何在Xamarin的ListView中将图像设置为ImageView?

时间:2014-07-17 12:19:37

标签: listview xamarin

我现在正在使用xamarin.android进行项目。我在屏幕上有一个列表视图,在listview中有一个Imageview,我使用SimpleAdapter来显示集合中的数据。 下面是提取数据集合的功能:

private JavaList<IDictionary<string, Object>> TriggerNetResAndFill()
    {

        string uri = "http://www.51yam.com/forum.php?mod=recommend";
        string content = string.Empty;
        var items = new JavaList<IDictionary<string, Object>>();
        var stream = streamPicker.GetUriStream(uri);
        content = streamPicker.GetStreamText(stream);

        HtmlDocument document = new HtmlDocument();
        document.LoadHtml(content);

        HtmlNodeCollection keyNodes = document.DocumentNode.SelectNodes("//a[@class='xst']");
        foreach (HtmlNode keyNode in keyNodes)
        {
            var map = new JavaDictionary<string, Object>();
            map.Add(KEY_ICON, userInfoPicker.GetU());
            items.Add(map);
        }  

        return items;
    }

userInfoPicker.GetU()函数是试图从给定url获取jpeg资源并返回流的函数:

 public Bitmap GetU()
    {

      var stream =   streamPicker.GetUriStream(iconU);
      Bitmap usericon = BitmapFactory.DecodeStream(stream);
      return usericon;
    }

然后在主要活动中,我做了以下事情:

protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        SetContentView (Resource.Layout.Main);

        listview = (ListView)FindViewById<ListView> (Resource.Id.listContent);

        processDialog = ProgressDialog.Show(this, "loading", "pls wait...", true);

        new Thread(new ThreadStart(() =>
        {
            RunOnUiThread(new Action(() =>
            {
                listResult = TriggerNetResAndFill();

                var adapter = new SimpleAdapter(this, listResult, Resource.Drawable.list_content,
                new String[] { KEY_ICON, KEY_TITLE, KEY_DESC },
                new int[] { Resource.Id.lvw_custom_img, Resource.Id.lvw_custom_name, Resource.Id.lvw_custom_description });
                listview.Adapter = adapter;

                processDialog.Dismiss();

            }));
        })).Start();
    }

但结果是,我没有按预期获得图像。有人会就此提出建议吗?我是xamarin和android的新手,我只是一个C#呃。期待你的建议。 THX。

1 个答案:

答案 0 :(得分:0)

我不确定您是如何实施ViewHolder的,但通常只需在ViewHolderListView内设置InitializeView ViewHolder你可以做类似

的事情
image = rootView.FindViewById<ImageView>(Resource.Id.listViewImage);
image.SetImageBitmap(yourMap[desiredKey]);

如果您想以任何理由清除ImageView,您可以执行以下操作:

image.SetImageBitmap(null);

但是如果从未设置位图,那么这可以解释为什么它不会加载。