[英]Repeating items in ListView?
一切都工作正常,但現在我沒有得到正在發生的事情,我有10項目在listView中顯示,它的工作正常,直到第6項,然后再次從第一項重復?
public class GroupDetailsAdapter extends BaseAdapter {
List<GetSetGroupDetails> group_details = new ArrayList<GetSetGroupDetails>();
Context context;
Typeface face;
public GroupDetailsAdapter(List<GetSetGroupDetails> group_details,
Context context) {
super();
this.group_details.clear();
this.group_details = group_details;
this.context = context;
face = Typeface.createFromAsset(context.getAssets(),
"HelveticaNeueLTStd-Th.otf");
}
@Override
public int getCount() {
// TODO Auto-generated method stub
int count = group_details.size();
return count;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
ViewHolder holder;
if (v == null) {
try {
LayoutInflater vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.group_item, null);
holder = new ViewHolder();
holder.tv_group_name = (TextView) v
.findViewById(R.id.tv_group_name);
String group_name = group_details.get(position).getGroup_name();
holder.tv_group_name.setText(group_name);
holder.tv_group_name.setTypeface(face);
holder.tv_group_reg_id = (TextView) v
.findViewById(R.id.tv_group_reg_id);
String groupRegId = group_details.get(position)
.getGroup_reg_id();
holder.tv_group_reg_id.setText(groupRegId);
holder.tv_group_reg_id.setTypeface(face);
holder.tv_subscriber_count = (TextView) v
.findViewById(R.id.tv_subscriber_count);
holder.tv_subscriber_count.setText(group_details.get(position)
.getSubscriber_count());
v.setTag(holder);
} catch (Exception e) {
e.printStackTrace();
}
} else
holder = (ViewHolder) v.getTag();
return v;
}
class ViewHolder {
TextView tv_group_name;
TextView tv_group_reg_id;
TextView tv_subscriber_count;
}
}
您正面臨數據重復問題,因為您沒有遵循實現View-Holder模式的確切標准。
在這里你正在查看findViewById()並設置數據如果view為null,那么它將對第一組項目運行正常,后面它將顯示下一組項目的相同數據。
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
ViewHolder holder;
if (v == null) {
try {
LayoutInflater vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.group_item, null);
holder = new ViewHolder();
holder.tv_group_name = (TextView) v
.findViewById(R.id.tv_group_name);
String group_name = group_details.get(position).getGroup_name();
holder.tv_group_name.setText(group_name);
holder.tv_group_name.setTypeface(face);
holder.tv_group_reg_id = (TextView) v
.findViewById(R.id.tv_group_reg_id);
String groupRegId = group_details.get(position)
.getGroup_reg_id();
holder.tv_group_reg_id.setText(groupRegId);
holder.tv_group_reg_id.setTypeface(face);
holder.tv_subscriber_count = (TextView) v
.findViewById(R.id.tv_subscriber_count);
holder.tv_subscriber_count.setText(group_details.get(position)
.getSubscriber_count());
v.setTag(holder);
} catch (Exception e) {
e.printStackTrace();
}
} else
holder = (ViewHolder) v.getTag();
return v;
}
實現View Holder模式的正確方法是在當前視圖為空(這將是第一次發生)時查找視圖,並僅在執行后設置數據。 因此,最終findViewById()
過程將首次完成,下次將通過使用附加標簽獲取視圖。
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
ViewHolder holder;
if (v == null) {
LayoutInflater vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.group_item, null);
holder = new ViewHolder();
holder.tv_group_name = (TextView) v
.findViewById(R.id.tv_group_name);
holder.tv_group_reg_id = (TextView) v
.findViewById(R.id.tv_group_reg_id);
holder.tv_subscriber_count = (TextView) v
.findViewById(R.id.tv_subscriber_count);
v.setTag(holder);
} catch (Exception e) {
e.printStackTrace();
}
} else
holder = (ViewHolder) v.getTag();
String group_name = group_details.get(position).getGroup_name();
holder.tv_group_name.setText(group_name);
holder.tv_group_name.setTypeface(face);
String groupRegId = group_details.get(position)
.getGroup_reg_id();
holder.tv_group_reg_id.setText(groupRegId);
holder.tv_group_reg_id.setTypeface(face);
holder.tv_subscriber_count.setText(group_details.get(position)
.getSubscriber_count());
return v;
}
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder vh;
View v = convertView;
if(v == null){
v = LayoutInflater.from(ctx).inflate(R.layout.simple_list_item, parent, false);
vh = new ViewHolder(v);
v.setTag(vh);
}
else{
vh = (ViewHolder) v.getTag();
}
vh.tvTitle.setText(list.get(position).toString());
return v;
}
class ViewHolder{
TextView tvTitle;
public ViewHolder(View v){
tvTitle = (TextView) v.findViewById(R.id.tvVideoName);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.