我现在正在使用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。
答案 0 :(得分:0)
我不确定您是如何实施ViewHolder
的,但通常只需在ViewHolder
和ListView
内设置InitializeView
ViewHolder
你可以做类似
image = rootView.FindViewById<ImageView>(Resource.Id.listViewImage);
image.SetImageBitmap(yourMap[desiredKey]);
如果您想以任何理由清除ImageView,您可以执行以下操作:
image.SetImageBitmap(null);
但是如果从未设置位图,那么这可以解释为什么它不会加载。