1

我有一个 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 方法中实现视图,但不确定如何使用它,或者是否有任何其他方法可以阻止图像重复。任何帮助表示赞赏

4

2 回答 2

0

我认为库 android-query 是在文档中为您制作的以帮助您:http ://code.google.com/p/android-query/wiki/ImageLoading

于 2012-12-18T15:11:08.700 回答
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

于 2012-12-18T15:18:04.380 回答