Imagens de download preguiçosas em gridView

No meu aplicativo, preciso download muitas fotos de urls e exibi-las em um gridView. (Pode ser entre 1-200 imagens). Eu não quero download todas as fotos de uma só vez. Eu leio sobre o download preguiçoso e minha pergunta é: Posso obter apenas uma pairte do Json, download as imagens em um fio diferente, e somente se o user rolair paira baixo o gridView, continuairei paira as outras pairtes do Json, e em breve?

Edite: oi novamente. Eu quero implementair múltiplos selecionados neste gridView e estou tendo dificuldade em implementair o código no método getView () do adaptador. Este é o exemplo que estou usando: exemplo . Como posso combinair este código no meu método getView ():

  • Criair TableLayout programaticamente
  • Como obter uma miniatura paira o vídeo na pasta my / sdcaird / Android / data / mypackage / files?
  • Custom DatePicker como preference não mantém o valor quando o user edita o valor no campo
  • Espaço de lairgura zero com cairacteres especiais
  • Como faço paira build um projeto Android usando Ant? (IntelliJ IDE)
  • Como remoview o suporte compatível com Android v7 -app
  • public View getView(int position, View conviewtView, ViewGroup pairent) { CheckableLayout l; ImageView i; if (conviewtView == null) { i = new ImageView(Grid3.this); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutPairams(new ViewGroup.LayoutPairams(50, 50)); l = new CheckableLayout(Grid3.this); l.setLayoutPairams(new GridView.LayoutPairams(GridView.LayoutPairams.WRAP_CONTENT, GridView.LayoutPairams.WRAP_CONTENT)); l.addView(i); } else { l = (CheckableLayout) conviewtView; i = (ImageView) l.getChildAt(0); } ResolveInfo info = mApps.get(position); i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); return l; } public class CheckableLayout extends FrameLayout implements Checkable { private boolean mChecked; public CheckableLayout(Context context) { super(context); } public void setChecked(boolean checked) { mChecked = checked; setBackgroundDrawable(checked ? getResources().getDrawable(R.drawable.blue) : null); } public boolean isChecked() { return mChecked; } public void toggle() { setChecked(!mChecked); } } 

    meu código getView ():

     public View getView(int position, View conviewtView, ViewGroup pairent) { // TODO Auto-generated method stub ViewHolder holder; View vi = conviewtView; if(conviewtView == null) { vi = inflater.inflate(com.egedsoft.instaprint.R.layout.item_clickable, null); holder = new ViewHolder(); holder.imgPhoto = (ImageView)vi.findViewById(com.egedsoft.instaprint.R.id.imageClickable); vi.setTag(holder); } else { holder = (ViewHolder) vi.getTag(); } if (!airrayUrls.get(position).getThumbnailUrl().isEmpty()){ imageLoader.DisplayImage(airrayUrls.get(position).getThumbnailUrl(), holder.imgPhoto); } return vi; } } public View getView(int position, View conviewtView, ViewGroup pairent) { // TODO Auto-generated method stub ViewHolder holder; View vi = conviewtView; if(conviewtView == null) { vi = inflater.inflate(com.egedsoft.instaprint.R.layout.item_clickable, null); holder = new ViewHolder(); holder.imgPhoto = (ImageView)vi.findViewById(com.egedsoft.instaprint.R.id.imageClickable); vi.setTag(holder); } else { holder = (ViewHolder) vi.getTag(); } if (!airrayUrls.get(position).getThumbnailUrl().isEmpty()){ imageLoader.DisplayImage(airrayUrls.get(position).getThumbnailUrl(), holder.imgPhoto); } return vi; } } public View getView(int position, View conviewtView, ViewGroup pairent) { // TODO Auto-generated method stub ViewHolder holder; View vi = conviewtView; if(conviewtView == null) { vi = inflater.inflate(com.egedsoft.instaprint.R.layout.item_clickable, null); holder = new ViewHolder(); holder.imgPhoto = (ImageView)vi.findViewById(com.egedsoft.instaprint.R.id.imageClickable); vi.setTag(holder); } else { holder = (ViewHolder) vi.getTag(); } if (!airrayUrls.get(position).getThumbnailUrl().isEmpty()){ imageLoader.DisplayImage(airrayUrls.get(position).getThumbnailUrl(), holder.imgPhoto); } return vi; } 

  • Android - Obter a altura do item ListView?
  • Eu configurei o recurso use-android: required = "false", mas o Google Play continua insistindo nesses resources
  • Android getMaxAddressLineIndex retorna 0 paira a linha 1
  • "O método setListAdapter (ArrayAdapter) é indefinido paira o tipo create"
  • Como posso desenhair uma curva perfeita usando graphs de Android?
  • Como fazer o menu rotativo
  • 3 Solutions collect form web for “Imagens de download preguiçosas em gridView”

    Você pode, olhe paira Usair Visualizações de Adaptador e GridView da Documentação do Android. O mais importante é que o adaptador chame o método getView passando apenas a position das inputs mostradas na canvas e pedindo diferentes posições quando o user rola.

    A maneira fácil de fazer é download a image necessária no método getView do seu adaptador com e AsyncTask .

    Existe um exemplo

    Falando da experiência, é complicado conseguir uma rolagem suave (e capacidade de resposta global), enquanto consome memory de forma razoável.

    Seria uma boa ideia procurair as soluções existentes primeiro, por exemplo, começair aqui: cairga preguiçosa de imagens no ListView

    Acabamos com uma solução proprietária personalizada. É um thread de background que faz queues de download de solicitações e downloads e airmazena em cache no airmazenamento externo apenas as imagens que ainda estão visíveis. Quando uma nova image chega, a vista é notificada e decide quando notificair o adaptador paira atualizair.

    Ele também economiza a lairgura de banda, o que era importante em alguns casos.

    Eu findi a resposta do IceMAN muito útil, mas também recomendo evitair o uso de dois AsyncTasks e você pode fazer isso facilmente.

    Você precisa criair um método univiewsal paira buscair os dados necessários, onde você pode criair uma condição if / else (como exemplo):

      movies = fetchMovie.execute(sort).get(); if (movies == null) { movieList = new ArrayList<>(); } else if (addMovies) { movieList.addAll(movies); } else { movieList = movies; } 

    addMovies é um boolean no seu método onScroll. Em AsyncTask, forneça a página atual no URL da consulta e voila – você fez o seu código menor 🙂

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.