2016-07-13 13 views
-1

Im Listview-Adapter:Wie lade ich Bilder in GridView innerhalb von ListView?

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

     final ViewHolder holder; 
     final DataEntity data = dataList.get(position); 

     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.item_list_asset_receivable, null); 
      holder.amountTV = (TextView) convertView.findViewById(R.id.tv_asset_liability_fill_accounts_receivable_amount); 
      holder.gridView = (CustomGridView) convertView.findViewById(R.id.cgv_images); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.amountTV.setText(String.valueOf(data.getAmount())); 

     final String id = data.getPicGroupId(); 

     OkHttpUtilsHelper.getImagesByGroupId(data.getPicGroupId(), TAG) 
       .execute(new ImageGroup.MyCallback() { 
        @Override 
        public void onResult(List<String> images) { 
         CustomGridViewAdapter adapter = new CustomGridViewAdapter(context, images); 
         holder.gridView.setAdapter(adapter); 
        } 
       }); 

     return convertView; 
    } 
} 

im Gridview-Adapter verwende ich glide Internet Bilder zu Image laden:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder; 
    if (convertView == null) { 
     viewHolder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.item_gridview_pics, null); 
     viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_pic); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    String imgPath = (String) dataList.get(position); 
    if (imgPath.startsWith("http")) { 
     Glide.with(context) 
        .load(imgPath) 
        .centerCrop() 
        .placeholder(R.mipmap.ic_launcher) 
        .crossFade() 
        .into(viewHolder.imageView); 
    } else { 
     viewHolder.imageView.setImageBitmap(BitmapFactory.decodeFile(imgPath)); 
    } 

    return convertView; 
} 

ich das Problem gelöst habe, dass Listview mit Gridview-Thema wie: Add a GridView to a ListView in Android

Während nach dem Protokoll, es scheint, der Gridview Adapter getView() würde die ListView Adapter getView() rückwärts auslösen, ruft dann Gridview Adapter getview wieder, eine Tat Schleife!

Alle Vorschläge sind willkommen!

+0

Verweise [this] (http://stackoverflow.com/a/38005996/5733111) – Sanoop

+0

Danke, aber ich habe bereits glide verwendet, es ist nicht ein asynchrones Laden von Bildern Problem, sollten wir uns darauf konzentrieren, wie Gridview zu verwenden innerhalb der Listenansicht richtig. –

Antwort

0

können Sie Picasso Library verwenden

Beispielcode:

Picasso.with(mContext) // 
      .load(TextUtils.isEmpty(mList.get(position).getImage_url()) ? null : mList.get(position).getImage_url()) 
      //.load("https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRp81DX-2x8DAJCmMCQKdYX3Hs1F-OGqhX_eYQnkbxtaX1dMrMNo8QMCY0") 
      .tag(mContext) // 
      .into(holder.imageViewDocumentIcon); 
0

Bessere Nutzung Aquery

aq.id(R.id.simpleLoadImg).image("http://programmerguru.com/android-tutorial/wp-content/uploads/2014/01/asynctask_thumb.png",false,false); 
0

Diese Frage bedeuten nicht, um die Lösung zu bekommen, wie Bilder asynchron zu laden, ist der entscheidende Punkt, wenn die Listenansicht Innenansicht - gridview geladene Bilder aus dem Internet der Ansicht geändert und die Listview würde getView() -Methode erneut aufrufen, was eine Dead-Schleife wäre.

Ich habe festgestellt, dass Sie asynchrone Job in getView() -Methode nicht ausführen können, kann diese Methode das Callback-Ergebnis nicht laden oder das Ergebnis würde erneut getView() auslösen.

So zog ich diesen asynchronen Job außerhalb von getView():

OkHttpUtilsHelper.getImagesByGroupId(data.getPicGroupId(), TAG) 
      .execute(new ImageGroup.MyCallback() { 
       @Override 
       public void onResult(List<String> images) { 
        CustomGridViewAdapter adapter = new CustomGridViewAdapter(context, images); 
        holder.gridView.setAdapter(adapter); 
       } 
      }); 

Ich habe gerade das Ergebnis und gab sie zur List Adapter, und das Problem ist gelöst!

Verwandte Themen