Autore Topic: CustomAdapter con GridView in Layout  (Letto 257 volte)

Offline raptorhugo

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet
  • Sistema operativo:
    Windows
CustomAdapter con GridView in Layout
« il: 19 Marzo 2015, 18:23:33 CET »
0
Buona sera a tutti, come da titolo mi trovo a dover fronteggiare un problema relativo ad un Adapter che viene invocato permanentemente in posizione 0. Ho letto molti post su Google, ma non sono riuscito a risolvere il problema. Sostanzialmente ho un layout che si adatta allo schermo del device utilizzando il 'weight' per impostare le dimensioni dei singoli layout che lo compongono. Cosi Facendo non posso usare la proprietà fill_parent e di conseguenza il metodo getView del mio adapter viene invocato in continuazione. La cosa singolare è che gli oggetti vengono comunque caricati correttamente a video ma il sovraccarico determina una lentezza eccessiva nello scroll della griglia in questione.

Avreste per caso una idea sul come posso approcciare dovendo necessariamente utilizzare dei layout che si ridimensionano?

ecco il mio adapter

Codice (Java): [Seleziona]
package com.apiciolabs.easycash;

import java.io.ByteArrayOutputStream;
import java.util.LinkedList;

import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.StateListDrawable;
import android.util.Base64;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.TextView;

import com.apiciolabs.easycash.Database.DbManager;
import com.apiciolabs.easycash.dao.Articoli;
import com.apiciolabs.easycash.utils.Converti;
import com.apiciolabs.easycash.utils.Costanti;

public class PluAdapter extends BaseAdapter
{
    private Context                                     context;
    public LinkedList<Articoli>         articoli;
    private View.OnClickListener        click_listener;
    private View.OnLongClickListener    long_click_listener;
    private View.OnDragListener drag;
    private View.OnTouchListener touch_listener;
    private CassaEditorActivity editor;
    private Resources resources;
    private boolean IsLista;
    public PluAdapter(Context context, LinkedList<Articoli> articoli, View.OnClickListener listener,Resources res)
    {
        this.context = context;
        this.articoli = articoli;
        this.click_listener = listener;
        this.resources=res;
    }

    public PluAdapter(Context context, LinkedList<Articoli> articoli, View.OnClickListener listener, CassaEditorActivity editor,Resources res)
    {
        this.context = context;
        this.articoli = articoli;
        this.click_listener = listener;
        this.editor = editor;
        this.resources=res;


    }
    public PluAdapter(Context context, LinkedList<Articoli> articoli,View.OnTouchListener listener,View.OnDragListener drag ,Resources res)
    {
        this.context = context;
        this.articoli = articoli;
        // this.click_listener = listener;
        //this.long_click_listener = listener_long;
        this.touch_listener= listener;
        this.drag=drag;
        this.resources=res;
    }
    public PluAdapter(Context context, LinkedList<Articoli> articoli,View.OnTouchListener listener ,Resources res)
    {
        this.context = context;
        this.articoli = articoli;
        // this.click_listener = listener;
        //this.long_click_listener = listener_long;
        this.touch_listener= listener;
        this.resources=res;

    }
    public PluAdapter(Context context,boolean Lista, LinkedList<Articoli> articoli, View.OnClickListener listener, View.OnLongClickListener listener_long,View.OnDragListener drag,Resources res)
    {
        this.context = context;
        this.articoli = articoli;
        this.click_listener = listener;
        this.long_click_listener = listener_long;
        this.drag=drag;
        this.resources=res;
        this.IsLista=Lista;
    }
    /*
        public PluAdapter(Context context, LinkedList<Articoli> articoli, View.OnClickListener listener, View.OnLongClickListener listener_long,Resources res)
        {
            this.context = context;
            this.articoli = articoli;
            this.click_listener = listener;
            this.long_click_listener = listener_long;
            this.resources=res;
        }*/


    public class ViewHolder {
        TextView nome;
        TextView plu_prezzo;
        ImageView bottone;
        ImageView comemenu;
        int position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        double x=6;
        System.out.println((int)Math.pow(x,2.0));
        FrameLayout plu=(FrameLayout)convertView;
        ViewHolder holder;

        if (plu == null)
        {
           LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           plu = (FrameLayout)inflater.inflate(R.layout.object_plu, null);
           holder= new ViewHolder();
           holder.plu_prezzo = ((TextView) plu.findViewById(R.id.flat_plu_prezzo));
           holder.bottone = (ImageView) plu.findViewById(R.id.flat_plu_button);
           holder.nome = ((TextView) plu.findViewById(R.id.flat_plu_nome));
           holder.comemenu= (ImageView)plu.findViewById(R.id.flat_plu_comemenu);
           plu.setTag(holder);
        } else {
            holder = (ViewHolder)plu.getTag();
        }


        Articoli row = articoli.get(position);

        holder.nome.setText(row.Descrizione);
       holder.plu_prezzo.setText(Converti.ArrotondaEccesso(row.getPrezzoDaUsare()) + StaticState.Impostazioni.getSimboloValuta());

        return plu;
    }

    @Override
    public int getCount()
    {

        return articoli.size();
    }

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

    @Override
    public long getItemId(int position)
    {
        return articoli.get(position).ID_Articoli;
    }



}

Offline raptorhugo

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet
  • Sistema operativo:
    Windows
Re:CustomAdapter con GridView in Layout
« Risposta #1 il: 23 Marzo 2015, 07:45:12 CET »
0
inserisco la risposta che potrebbe essere utile a qualcuno. Purtroppo , per evitare il continuo rendering delle liste o delle grid view, è necessario impostare delle dimensioni assolute agli oggetti o utilizzare il fill_parent. Questo ovviamente impedisce di avere layout con proprietà weight impostata.