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) { 

        } 
        }

私は2つの問題に直面しています。画像が繰り返され、スクロールがスムーズではありません。getviewメソッドでビューホルダーを実装しようとしていますが、使用方法がわからないか、画像の繰り返しを停止する他の方法があります。どんな助けでも大歓迎です

4

2 に答える 2

0

librairy android-queryは、ドキュメントであなたを助けるために作られていると思います:http ://code.google.com/p/android-query/wiki/ImageLoading

于 2012-12-18T15:11:08.700 に答える
0

画像を効率的にロードするために、Universal Image Loaderはバックグラウンドで画像を効率的にロードするための優れたライブラリです (Lazy Loading)。

初めてビューを膨らませてビューをスクロールすると、リストには古いビューを繰り返すという制限があります。最善の解決策は、次のようなすべてのビューを保持する 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 に答える