您好 Stack Overflow Android 用户,
请帮助解决以下问题:
问题
我正在为列出鱼类种类的应用程序编写一个功能。我正在为适配器使用自定义 ListView 适配器类(我们称之为FishSpeciesListAdapter)。到目前为止,我已经记录了 27 种鱼类作为程序的默认值(您最终也可以自己添加一些)。问题是当我将适配器链接到实际的 listview xml 对象时,它似乎一直在迭代相同的 5-6 个物种。
问题必须出在自定义适配器中,因为我已经测试了记录的物种,并且在我传递给适配器的列表中所有物种都不同。
这是我设置适配器的代码:
this.n_fishSpeciesListView = FindViewById<ListView> (Resource.Id.xml_fishSpeciesListView);
this.n_fishSpeciesListView.Adapter = new FishSpeciesListAdapter (this,
this.n_model.SpecieManager.Species);
这是自定义 ListView 适配器代码:
public class FishSpeciesListAdapter : BaseAdapter
{
Context n_context;
List<AppCode.Specie> n_specieData;
public FishSpeciesListAdapter (Context context, List<AppCode.Specie> specieData)
{
this.n_context = context;
this.n_specieData = specieData;
}
public override int Count {
get { return this.n_specieData.Count; }
}
public override Java.Lang.Object GetItem (int position)
{
return null;
}
public override long GetItemId (int position)
{
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public override View GetView (int position, View convertView, ViewGroup parent)
{
View v;
if(convertView==null){
LayoutInflater li = LayoutInflater.FromContext(parent.Context);
v = li.Inflate(Resource.Layout.Adapter_FishSpeciesIcon, null);
ImageView iconImage = (ImageView)v.FindViewById(Resource.Id.xml_adapter_fishSpeciesIconImage);
TextView nameText = (TextView)v.FindViewById(Resource.Id.xml_adapter_fishSpeciesNameText);
TextView scientificNameText = (TextView)v.FindViewById(Resource.Id.xml_adapter_fishSpeciesScientificNameText);
nameText.Text = this.n_specieData[position].Name;
scientificNameText.Text = this.n_specieData[position].ScientificName;
if (this.n_specieData[position].RelatedMedia.AttachedPhotos.Count < 1)
{
iconImage.SetImageResource(Resource.Drawable.Icon);
}
else
{
iconImage.SetImageBitmap(BitmapFactory.DecodeByteArray(this.n_specieData[position].RelatedMedia.AttachedPhotos[0], 0, this.n_specieData[position].RelatedMedia.AttachedPhotos[0].Length));
}
}
else
{
v = convertView;
}
return v;
}
}
所以当我执行上面的代码时,这是我得到的截图:
正如您所看到的,我确信在传递的 List 变量中记录了至少 27 种不同的物种。关于为什么会这样以及如何解决这个问题的任何帮助都会非常有帮助。
我的研究
我读过它可能会在适配器的 GetView 方法中重用“View currentView”变量。我在这个链接中找到了这些信息。我只是不知道如何在我的情况下解决这个问题。代码示例将是很好或详细的指导。感谢您的时间。