【发布时间】:2014-03-02 06:58:25
【问题描述】:
在我的 Listview 的 ListItem 中,我有多个控件,其中一个是 imageview。我的目的是用户单击该图像时,源应更改为其他内容。我正在实现 ViewHolder 模式,现在我可以在点击时切换源。我当前的问题是,当我向下滚动时,正在创建新视图(重新使用),并且当我尝试再次向上移动时,我切换图像的列表项再次使用默认图像源创建,因为我的数据源列表保持不变.请帮忙。
private class ViewHolder : Java.Lang.Object
{
//Activity context;
public MyTextView HadithBook;
public MyTextView HadithChapter;
public MyTextView HadithText;
public ImageView FavButton;
public ImageView ShareButton;
public EventHandler Handler;
public MyTextView RowId;
public MyTextView IsFavorite;
}
public override View GetView (int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
if (convertView == null)
{
convertView = context.LayoutInflater.Inflate (Resource.Layout.HadithListViewItem, null);
holder = new ViewHolder ();
holder.HadithBook = convertView.FindViewById<MyTextView> (Resource.Id.HadithBook);
holder.HadithChapter = convertView.FindViewById<MyTextView> (Resource.Id.HadithChapter);
holder.HadithText = convertView.FindViewById<MyTextView> (Resource.Id.HadithText);
holder.FavButton = convertView.FindViewById<ImageView> (Resource.Id.favButton);
holder.ShareButton = convertView.FindViewById<ImageView> (Resource.Id.ShareButton);
holder.IsFavorite = convertView.FindViewById<MyTextView> (Resource.Id.IsFavorite);
holder.RowId = convertView.FindViewById<MyTextView> (Resource.Id.RowId);
holder.Handler = (s, e) => FavoriteHandler (s, e, holder);
convertView.Tag = holder;
}
if (holder == null)
{
holder = (ViewHolder)convertView.Tag;
holder.FavButton.Click -= holder.Handler;
}
var item = items[position];
holder.HadithBook.Text = item.BookName;
holder.HadithChapter.Text = item.ChapterName + " - " + item.HadithID;
if (!string.IsNullOrEmpty (keyword) & !string.IsNullOrWhiteSpace (keyword)) {
holder.HadithText.TextFormatted = (Html.FromHtml (ReplaceEx ((item.HadithText).ToString (), keyword, "<font color='#ff9000'><b>" + keyword + "</b></font>")));
} else {
holder.HadithText.TextFormatted =Html.FromHtml(item.HadithText);
}
if (holder.FavButton.Tag.Equals(0))
{
holder.FavButton.Tag = 0;
holder.FavButton.SetImageResource (Resource.Drawable.ic_action_not_important);
} else
{
holder.FavButton.Tag = 1;
holder.FavButton.SetImageResource (Resource.Drawable.ic_action_important);
}
holder.FavButton.Click += holder.Handler;
convertView.SetOnClickListener (null);
return convertView;
}
void FavoriteHandler (object sender, EventArgs e, ViewHolder holder)
{
Database db = new Database ();
if (holder.FavButton.Tag.Equals (0)) {
holder.FavButton.SetImageResource (Resource.Drawable.ic_action_important);
holder.FavButton.Tag = 1;
db.InsertQuery ("insert into favorite values ('" + holder.RowId + "');");
} else if (holder.FavButton.Tag.Equals (1)) {
holder.FavButton.SetImageResource (Resource.Drawable.ic_action_not_important);
holder.FavButton.Tag = 0;
db.InsertQuery ("Delete from favorite where id ='" + holder.RowId + "';");
}
db = null;
}
【问题讨论】:
-
这是 monodroid 应用程序。我的意思是使用 C# 的 Android 应用程序。先生,这编译得很好,编译错误为零。
-
好的,好的,我会删除我的评论。
标签: android listview xamarin.android xamarin android-imageview