android 关于ListView Item数据混乱问题

来源:互联网 发布:电脑网络打不开怎么办 编辑:程序博客网 时间:2024/05/16 06:08
这个问题关系到一个软件的成败,为什么这么说呢?因为ListView是andriod主要的展示数据的方式,所以我们用的最多的也就是ListView.而如果ListView有问题,那不就是最大的问题.
今天讲的这个问题是关于ListView数据混乱的问题.问题是这样的,数据已经展示在了ListView上的时候,当我们拉动ListView.每个Item项的数据会变动.如下图:
android <wbr>关于ListView <wbr>Item数据混乱问题这是没有拖动时的数据.当我拖动ListView时,变成了如下图:
android <wbr>关于ListView <wbr>Item数据混乱问题
数据在变来变去.
想了很久也不知道在哪里出了问题,最后经理终于发现了我的问题.问题有三点:
第一.
我的ViewHolder写的有问题.如下:
private class ViewHodler
{
public static TextView t_Subject;
public static TextView t_Author;
public static TextView t_Dateline;
public static ImageView t_photo;
public static TextView t_Replies;
}
我将ViewHodler里的每个属性都设置成了static.
static,说明只用一个内存空间,而getView时,每个Item的数据不一样,所以不能用static 
第二.
没有重置ViewHodler.
if (convertView == null)
{
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.m_digesttopiclist_item,
null);
hodler = new ViewHodler();
hodler.t_Subject = (TextView) convertView
.findViewById(R.m_digesttopicid.subject);
hodler.t_Author = (TextView) convertView
.findViewById(R.m_digesttopicid.author);
hodler.t_Dateline = (TextView) convertView
.findViewById(R.m_digesttopicid.dateline);
hodler.t_photo = (ImageView) convertView
.findViewById(R.m_digesttopicid.userimage);
hodler.t_Replies = (TextView) convertView
.findViewById(R.m_digesttopicid.replies);
hodler.t_photo.setTag(oAuthorphoto);
convertView.setTag(hodler);
}else {
hodler = (ViewHodler) convertView.getTag();
resetViewHolder(hodler);
}
protected void resetViewHolder(ViewHodler p_ViewHolder)
{
p_ViewHolder.t_Subject.setText(null);
p_ViewHolder.t_Author.setText(null);
p_ViewHolder.t_Dateline.setText(null);
p_ViewHolder.t_photo.setImageDrawable(null);
p_ViewHolder.t_Replies.setText(null);
}
第三.
头像没有绑定tag
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHodler hodler = null;
String oTid =null;
String oSubject = null;
String oAuthor = null;
String oDateline = null;
String oReplies = null;
String odateStr = null;
String oAuthorphoto=null;
try
{
ExtJSONObject oDigestItem  = mForumJsonArray.getExtJSONObject(position);
oTid = oDigestItem.getString("tid");
oSubject = oDigestItem.getString("subject");
oAuthor = oDigestItem.getString("author");
oDateline =oDigestItem.getString("dateline");
odateStr = AppUtility.formatRelativeTime(Integer
.parseInt(oDateline));
Log.i("TAG", "date= " + oDateline);
oReplies = oDigestItem.getString("replies");
oAuthorphoto=oDigestItem.getString("authorid");
}
catch (JSONException e)
{
e.printStackTrace();
}
if (convertView == null)
{
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.m_digesttopiclist_item,
null);
hodler = new ViewHodler();
hodler.t_Subject = (TextView) convertView
.findViewById(R.m_digesttopicid.subject);
hodler.t_Author = (TextView) convertView
.findViewById(R.m_digesttopicid.author);
hodler.t_Dateline = (TextView) convertView
.findViewById(R.m_digesttopicid.dateline);
hodler.t_photo = (ImageView) convertView
.findViewById(R.m_digesttopicid.userimage);
hodler.t_Replies = (TextView) convertView
.findViewById(R.m_digesttopicid.replies);
hodler.t_photo.setTag(oAuthorphoto);
convertView.setTag(hodler);
}else {
hodler = (ViewHodler) convertView.getTag();
resetViewHolder(hodler);
}

hodler.t_Subject.setText(oSubject);
hodler.t_Dateline.setText(odateStr);
hodler.t_Author.setText(oAuthor);
hodler.t_Replies.setText(oReplies);
hodler.t_Replies.setGravity(Gravity.CENTER);
hodler.t_photo.setTag(oTid);
String userFaceUrl=AppUtility.getResourceString(R.string.apiuserphotourl)+"uid="+oAuthorphoto+"&size=middle";
this.setImageValue(hodler.t_photo,oTid,userFaceUrl,100, 100, R.drawable.m_newestlistimage,-1);

return convertView;
}

文章转自:http://blog.sina.com.cn/s/blog_629b701e0100y7dn.html
原创粉丝点击