【问题标题】:how to set image to ImageView inside ListView in Xamarin?如何在 Xamarin 的 ListView 中将图像设置为 ImageView?
【发布时间】:2014-07-17 12:19:36
【问题描述】:

我现在正在使用 xamarin.android 进行项目。我在屏幕上有一个列表视图,在列表视图中有一个 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;
    }

然后在mainactivity中,我做以下事情:

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#er。期待您的建议。谢谢。

【问题讨论】:

    标签: listview xamarin


    【解决方案1】:

    我不确定你是如何实现你的ViewHolder,但通常你只需要设置一个ViewHolder 和你的ListView 和你的InitializeView 中的ViewHolder,你可以做类似的事情

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

    如果您出于任何原因想要清除 ImageView,您可以这样做:

    image.SetImageBitmap(null);
    

    但如果从未设置位图,这或许可以解释为什么它无法加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多