问题是,当我点击itemTwo(按钮)时,它会更改该行和另一行的itemNum文本,反之亦然。 例如;在第1行:如果我点击按钮,它会更改该行的文本,但也会在我向下滚动时更改第6行的文本。
因此第1行和第6行彼此相同,第2行和第7行以及第3行和第8行相同。
当我向上滚动第一行的文本时,默认情况下第2行会更改为第一行的前一个文本,然后我向下滚动并返回一些行文本更改而不单击按钮
备注:我的列表视图有7行,但只显示4行。 ListView的高度为196dp,每个单元格/行的高度为49dp。
public class Holder : Java.Lang.Object
{
public TextView itemName
public TextView itemNum
public Button itemOne;
public Button itemTwo;
public int pos;
public void Initialize(View view)
{
itemName = view.FindViewById<TextView> (Resource.Id.itemNameTextView);
itemNum = view.FindViewById<TextView> (Resource.Id.itemNumTextView);
itemOne = view.FindViewById<Button> (Resource.Id.itemOneButton);
itemTwo = view.FindViewById<Button> (Resource.Id.itemTwoButton);
itemTwo.Click += itemClick;
}
public void Bind(Activity context, string gn, int one, int two, int num, int position)
{
itemtName.Text = gn;
itemOne.Tag = one;
itemTwo.Tag = two;
itemNum.Tag = num;
pos = position;
}
public void itemClick(object sender, EventArgs e)
{
Button clickedButton = sender as Button;
int s = (int)clickedButton.Tag;
Console.WriteLine (s.ToString ());
switch ((int)clickedButton.Tag)
{
case 122:
itemNum.Text = "1";
break;
case 222:
itemNum.Text = "2";
break;
case 322:
itemNum.Text = "3";
break;
}
}
}
private class ItemListAdapter : BaseAdapter<Item>
{
private Activity activity;
public List<Item> data;
public ItemListAdapter(Activity activity, List<Item> data)
{
this.activity = activity;
this.data = data;
}
public override Item this[int position]
{
get { return this.data [position]; }
}
public override int Count
{
get { return this.data.Count(); }
//get {return 5;}
}
public override long GetItemId(int position)
{
return 0;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
Holder holder;
if (convertView == null)
{
convertView = this.activity.LayoutInflater.Inflate (Resource.Layout.GarmentItem, null);
holder = new Holder ();
holder.Initialize (convertView);
convertView.Tag = holder;
}
Item item = this.data [position];
holder = (Holder)convertView.Tag;
holder.Bind (this.activity, item.itemName, item.itemOneTag, item.itemTwoTag, itemNumTag, position);
return convertView;
}
答案 0 :(得分:1)
Android在其馆藏中重复使用Views。那么现在发生的是你点击一个单元格并设置itemNum的文本。然后滚动时,单击的单元格视图将重新用于集合中的新项目。由于您没有为itemNum设置默认值,因此先前设置的值会延续。
要解决此问题,您应该在视图中设置所有项目的默认值。在这种情况下,如果您在Bind方法中将itemNum.text设置为空字符串,它将解决您当前的问题。
答案 1 :(得分:0)
点击按钮后,您需要再次设置标记,当列表视图中有一个项目时,您需要确保在更改后重置标记