【发布时间】:2014-04-17 17:20:32
【问题描述】:
我发现了很多关于这个主题的问题,但没有一个可以帮助我。就这样吧。
我正在使用这个 BaseAdapter 构建一个 ListView
public class ListAdapter extends BaseAdapter {
Context context;
int layout;
Person[] mpeople;
public PostListAdapter(Context context,int layout, Person[] people){
this.context=context;
this.layout=layout;
this.mpeople=people;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v=convertView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(layout, parent, false);
}
Person swig=mpeople[position];
ImageView profilepic= (ImageView) v.findViewById(R.id.profilepic);
profilepic.setImageResource(swig.getUser().getProfilepic());
TextView username= (TextView) v.findViewById(R.id.user_name);
username.setText(swig.getUser().getUsername());
TextView timestamp= (TextView) v.findViewById(R.id.time);
timestamp.setText(Integer.toString(swig.getTimestamp()));
TextView privacy= (TextView) v.findViewById(R.id.privacy);
privacy.setText(swig.getPrivacy());
TextView hashtag= (TextView) v.findViewById(R.id.hashtagtext);
hashtag.setText(swig.getHashtag());
TextView n_likes= (TextView) v.findViewById(R.id.likenumber);
n_likes.setText(Integer.toString(swig.getN_likes()));
TextView n_comments= (TextView) v.findViewById(R.id.commentnumber);
n_comments.setText(Integer.toString(swig.getN_comments()));
ImageView cell1= (ImageView) v.findViewById(R.id.cell1);
cell1.setImageResource(swig.getPics()[0]);
ImageView cell2= (ImageView) v.findViewById(R.id.cell2);
cell2.setImageResource(swig.getPics()[1]);
ImageView cell3= (ImageView) v.findViewById(R.id.cell3);
cell3.setImageResource(swig.getPics()[2]);
ImageView cell4= (ImageView) v.findViewById(R.id.cell4);
cell4.setImageResource(swig.getPics()[3]);
ImageView cell5= (ImageView) v.findViewById(R.id.cell5);
cell5.setImageResource(swig.getPics()[4]);
ImageView cell6= (ImageView) v.findViewById(R.id.cell6);
cell6.setImageResource(swig.getPics()[5]);
ImageView cell7= (ImageView) v.findViewById(R.id.cell7);
cell7.setImageResource(swig.getPics()[6]);
ImageView cell8= (ImageView) v.findViewById(R.id.cell8);
cell8.setImageResource(swig.getPics()[7]);
ImageView cell9= (ImageView) v.findViewById(R.id.cell9);
cell9.setImageResource(swig.getPics()[8]);
return v;
}
@Override
public int getCount() {
return mpeople.length;
}
@Override
public Object getItem(int arg0) {
return mpeople[arg0];
}
@Override
public long getItemId(int arg0) {
return arg0;
}
}
数组 People[] 是在片段上创建的,每个条目都是不同的 [确实如此,我检查过],但由于某种原因,当我运行代码时,代码的某些元素不是。
所有的 ImageViews cell1 到 cell9 只显示最后一个条目的图像。
如果需要更多代码或信息,请随时询问。
提前致谢。
已解决
问题出在数组的创建中,这是非常小的问题,与适配器无关。
【问题讨论】:
-
... 在您按照其他人的建议使其工作之后,还请查看 ViewHolder 模式以摆脱所有那些 findViewById,这是一个非常慢的调用,您的下一个问题将是: “为什么我的列表滚动这么慢?”
-
感谢您的建议,已经进行了所需的更改,我正在使用 ViewHolder。
-
转向我的检查技巧不是那么好,再次检查后问题出在数组本身。所以,适配器正在完成它的工作。
-
酷!即使它正在完成它的工作,使用 ViewHolder 模式也可以节省大量时间。在较小的适配器上可能差别不大,但在您的情况下,您有大量的 findViewById:每次视图进入或退出视图空间时,ListView 都会不断执行它们(在快速滚动的情况下数百次)
标签: android listview android-fragments android-listview baseadapter