我有一个arrayaadapter,我正在检索带有图像的手机通讯录号码 并将其显示在列表中。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) (getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
view = inflater.inflate(renderer, null);
}
TextView text = (TextView) view.findViewById(R.id.name);
TextView textContNo = (TextView) view.findViewById(R.id.contactno);
TextView textEmailId = (TextView) view.findViewById(R.id.emailId);
Profile contact = listCont.get(position);
text.setText(contact.getName());
QuickContactBadge photo = (QuickContactBadge ) view.findViewById(R.id.quickContactBadge1);
photo.setTag(contact.getMobileNo());
new LoadImage(photo).execute(contact.getMobileNo());
使用asyncTask
加载backgroundthread中的图像 class LoadImage extends AsyncTask<String, Void, Bitmap>{
private QuickContactBadge qcb;
public LoadImage(QuickContactBadge qcb) {
this.qcb= qcb;
}
@Override
protected Bitmap doInBackground( final String... params) {
activity.runOnUiThread(new Runnable() {
public void run() {
new QuickContactHelper(activity, qcb, (String) params[0]).addThumbnail();
}
});
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
}
}
我遇到两个问题,图像重复,滚动不顺畅 我试图在getview方法中实现viewholder但不知道如何使用它或是否有任何其他方法来阻止图像重复。任何帮助表示赞赏
答案 0 :(得分:0)
我认为库android-query是为你而制作的 在文档中帮助您:http://code.google.com/p/android-query/wiki/ImageLoading
答案 1 :(得分:0)
为了有效地加载图像,Universal Image Loader是一个很好的库,可以有效地在后台加载图像(延迟加载)。
有时会发生什么,当你第一次给任何视图充气时,滚动视图,列表有一些重复旧视图的限制。要做的最佳解决方案是必须使用ViewHolder来保存所有视图,例如
class ViewHolder
{
View rowView;
TextView textview = null;
public ViewHolder(View view)
{
rowView = view;
}
public TextView getTextView()
{
if(textview ==null)
textview = rowView.findViewById(R.id.text1);
return textview;
}
}
你可以在你的适配器中使用它,如
if(convertview ==null)
{
convertview = inflater.inflate(renderer, null);
ViewHolder holder = new ViewHolder(convertview);
convertview.setTag(holder);
}
ViewHolder tempHolder = (ViewHolder) convertview.getTag();
TextView textView = tempHolder.getTextView();
如果您执行此操作,则textview
和其他观点的引用将保留在ViewHolder
中。