2012-08-11 40 views
1

我做了tweer饋線,我不知道如何使用viewHolder模式來管理圖像如何使用視圖模式管理由gson提供的圖像?

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View v = convertView; 
    if (v == null) {    
     inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
     v = inflater.inflate(R.layout.activity_result, null); 
     holder = new ViewHolder(); 

     holder.name = (TextView) v.findViewById(R.id.name); 
     holder.tweet = (TextView) v.findViewById(R.id.tweet); 
     holder.avatar = (ImageView) v.findViewById(R.id.avatar); 
     Log.v("TAG", "ACA SI LLEGE holder cargado"); 
     holder.name.setText(mitems.get(position).getFromUser()); 
     holder.tweet.setText(mitems.get(position).getText()); 


     task = new BackgroundAsyncTask(this, position); 
     task.execute(); 


     v.setTag(holder); 
    } else {    
    holder = (ViewHolder) convertView.getTag();   
    }        
    return v; 

} 



public class BackgroundAsyncTask extends AsyncTask<Void, Integer, Void>{ 

    private ResultsAdapter resultAdapter; 
    private int position; 
    private MyApplication myapp; 
    private Bitmap bitmap; 

    public BackgroundAsyncTask(ResultsAdapter adptr, int position){ 
     this.resultAdapter = adptr; 
     this.position = position; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

      try { 
       for(int i = 0; i < mitems.size(); i++){    
       bitmap = BitmapFactory.decodeStream((InputStream) 
        new URL(mitems.get(i).getProfileImageUrl()).getContent()); 
      } 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) {  
      myapp.setProgreso(values[0]); 
    } 
    @Override 
    protected void onPostExecute(Void result){  
     holder.avatar.setImageBitmap(bitmap); 
    } 

回答

0

解決方案:

public class ResultsAdapter extends BaseAdapter{ 

private Context mContext; 
private LayoutInflater inflater; 
private List<Result> mitems; 
private List<ImageView> allImageViews = new ArrayList<ImageView>(); 
private ViewHolder holder; 
private BackgroundAsyncTask task; 

public ResultsAdapter(Context c, List<Result> mitems){ 
    mContext = c; 
    inflater = LayoutInflater.from(mContext); 
    this.mitems = mitems; 
} 

@Override 
public int getCount() { 
    return mitems.size(); 
} 

@Override 
public Object getItem(int position) { 
    return mitems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View v = convertView; 
    if (v == null) {    
     inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
     v = inflater.inflate(R.layout.activity_result, null); 
     holder = new ViewHolder();   
     holder.name = (TextView) v.findViewById(R.id.name); 
     holder.tweet = (TextView) v.findViewById(R.id.tweet); 
     holder.avatar = (ImageView) v.findViewById(R.id.avatar); 
     holder.name.setVisibility(holder.name.INVISIBLE); 
     holder.tweet.setVisibility(holder.tweet.INVISIBLE); 
     holder.name.setText(mitems.get(position).getFromUser()); 
     holder.tweet.setText(mitems.get(position).getText()); 

     allImageViews.add(holder.avatar); 

     task = new BackgroundAsyncTask(); 
     task.execute(); 
     holder.name.setVisibility(holder.name.VISIBLE); 
     holder.tweet.setVisibility(holder.tweet.VISIBLE); 

     v.setTag(holder); 
    } else {    
    holder = (ViewHolder) convertView.getTag();   
    }        
    return v;  
} 
public class BackgroundAsyncTask extends AsyncTask<Void, Integer, Void>{ 

    private MyApplication myapp; 
    private List<Bitmap> bitmaps; 
    private ProgressDialog dialog; 

    public BackgroundAsyncTask(){ 
     bitmaps = new ArrayList<Bitmap>(); 
     dialog = new ProgressDialog(mContext); 
     dialog.setTitle("Twitter Searching App"); 
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setMessage("Searching..."); 
     dialog.setCancelable(true); 
     dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel();  
          } 
         } 
        ); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     for(int i =0; i < allImageViews.size(); i++){        
       try {    
        bitmaps.add(BitmapFactory.decodeStream((InputStream) 
         new URL(mitems.get(i).getProfileImageUrl()).getContent())); 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       }      
     } 

     return null; 
    } 
    @Override 
    protected void onPreExecute() {     
     dialog.show();  
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) {  
      myapp.setAdptr(ResultsAdapter.this); 
    } 
    @Override 
    protected void onPostExecute(Void result){  
     for(int i =0; i < allImageViews.size(); i++){ 
      allImageViews.get(i).setImageBitmap(bitmaps.get(i)); 
      holder.avatar = allImageViews.get(i); 
     } 
     if (dialog.isShowing()) {    
      dialog.dismiss();   
      } 
    } 

} 

static class ViewHolder{ 
    TextView name, tweet; 
    ImageView avatar; 
} 

} 
相關問題