Android 如何使用id在视图对象中设置多个标记?
如图所示,它表示可能存在内存泄漏。我正试图在convertView中标记holder和另一个对象。我该怎么办?我可以忽略这一点吗Android 如何使用id在视图对象中设置多个标记?,android,android-view,Android,Android View,如图所示,它表示可能存在内存泄漏。我正试图在convertView中标记holder和另一个对象。我该怎么办?我可以忽略这一点吗 可以使用临时数据结构并根据位置保留值。例如: class YourModelClass { Yourfield1; Yourfield2; } 并将值保留在数组中,然后根据getView中的位置可以使用它 将值标记到convertView将不再有用,因为它将被重用。您可以使用临时数据结构,并根据位置保留值。例如: class YourModelClas
可以使用临时数据结构并根据位置保留值。例如:
class YourModelClass
{
Yourfield1;
Yourfield2;
}
并将值保留在数组中,然后根据getView中的位置可以使用它
将值标记到convertView将不再有用,因为它将被重用。您可以使用临时数据结构,并根据位置保留值。例如:
class YourModelClass
{
Yourfield1;
Yourfield2;
}
并将值保留在数组中,然后根据getView中的位置可以使用它
将值标记到convertView将不再有用,因为它将被重复使用。使用list或arraylist存储对象并将该列表作为标记传递。因此,您可以在需要的位置访问它,在那里获取标记并强制转换到arraylist,然后获取对象。使用list或arraylist存储对象并将该列表作为标记传递。这样您就可以访问它它位于您希望在其中获取标记并强制转换到arraylist的位置,然后获取您的对象。尝试使用此选项进行多重标记:
Class MultipleTag{
Incident incident; // Stores incident object
ViewHolder holder ;
public MultipleTag(){
holder = new ViewHolder();
}
public setIncidentTag(Incident incident){
this.incident = incident;
}
public static class ViewHolder{
TextView ... ;
ImageView ...;
}
}
/* Inside the adapter's getView() method */
MutlipleTag.ViewHolder viewHolder;
if(converView == null){
MultipleTag obj = new MultipleTag();
viewHolder = obj.holder; // obtain the viewHolder
obj.setIncidentTag(incident); // Setting incident tag.
obj.holder.textViewitem = (TextView)view.findViewById(R.id...);
// .... Initialize all the viewHolder variables
/* now set tag to the MultipleTag object */
convertView.setTag(position, obj);
}
else{
MultipleTag temp = (MultipleTag)convertView.getTag(position);
viewHolder = temp.holder; // obtain the viewHolder object.
}
请注意,我已经在MultipleTag类中声明了静态ViewHolder类,并且我只使用一个keyposition来关联标记对象,而不是您的示例中的两个。如果这有帮助,请告诉我。尝试将其用于多重标记:
Class MultipleTag{
Incident incident; // Stores incident object
ViewHolder holder ;
public MultipleTag(){
holder = new ViewHolder();
}
public setIncidentTag(Incident incident){
this.incident = incident;
}
public static class ViewHolder{
TextView ... ;
ImageView ...;
}
}
/* Inside the adapter's getView() method */
MutlipleTag.ViewHolder viewHolder;
if(converView == null){
MultipleTag obj = new MultipleTag();
viewHolder = obj.holder; // obtain the viewHolder
obj.setIncidentTag(incident); // Setting incident tag.
obj.holder.textViewitem = (TextView)view.findViewById(R.id...);
// .... Initialize all the viewHolder variables
/* now set tag to the MultipleTag object */
convertView.setTag(position, obj);
}
else{
MultipleTag temp = (MultipleTag)convertView.getTag(position);
viewHolder = temp.holder; // obtain the viewHolder object.
}
请注意,我已经在MultipleTag类中声明了静态ViewHolder类,并且我只使用一个keyposition来关联标记对象,而不是您的示例中的两个。让我知道这是否有帮助。这可能是一个非常糟糕的视窗夹图案设计。您正在尝试使用setTagint键,对象标记方法。但是,在内部,您将“key”值设置为R.id.holder和R.id.taged_object,它们是常量!。setTag方法的键值应该为每一行使用唯一的值。您可以使用getView int position、View convertView、ViewGroup parent的位置变量作为键。incident对象也是唯一的。因为这只是当前位置的适配器arraylist的一个对象;我已根据你的要求补充了一个答案。检查一下,让我知道这是否有帮助。这可能是一个非常糟糕的视窗模式设计。您正在尝试使用setTagint键,对象标记方法。但是,在内部,您将“key”值设置为R.id.holder和R.id.taged_object,它们是常量!。setTag方法的键值应该为每一行使用唯一的值。您可以使用getView int position、View convertView、ViewGroup parent的位置变量作为键。incident对象也是唯一的。因为这只是当前位置的适配器arraylist的一个对象;我已根据你的要求补充了一个答案。检查一下,让我知道这是否有帮助。像HashMap吗?不,这是示例中使用的自定义模型类。像HashMap吗?不,这是示例中使用的自定义模型类。我明白了…,想法是从ListView的onItemClickListener{}轻松获取标记对象您还可以通过请求itemclick方法public void onItemClickAdapterView arg0、View arg1、int position、long arg3来检索listview项的所有对象。这里arg1是listview项,因此您可以在itI上调用getchild方法。请参见…,其目的是从listview的onItemClickListener{}轻松获取标记对象您还可以通过请求itemclick方法public void onItemClickAdapterView arg0,View arg1,int position,long arg3来检索listview项的所有对象。这里arg1是listview项,因此您可以在其上调用getchild方法。这非常有趣。。让我来测试一下。我下一个小时给你答复这很有趣。。让我来测试一下。我会在一小时后回复你