Autore Topic: SimpleAdapter con immagini prese da SD e colore di sfondo variabile  (Letto 326 volte)

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Salve  stavo programmando una semplice app, basandomi sulla guida "ListView con layout personalizzato tramite un SimpleAdapter"

Ecco qual' è il mio problema:

1) vorrei impostare lo sfondo del RelativeLayout di serie.xml nel FOR dell ArrayList (cosi che ogni cella sia di un colore diverso)
2) vorrei impostare un' immagine  (PRESA dalla memoria interna) nella ImageView del file  serie.xml nel FOR dell ArrayList (cosi che ogni cella abbia un icona differente)


ecco il file xml serie.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="60dip"
       android:id="@+id/serieRelativeLayout"
       android:background="#FFF"
       android:padding="5dip">

    <ImageView
           android:id="@+id/logo"
           android:layout_width="50dp"
           android:layout_height="50dp">
    </ImageView>


    <TextView
           android:text="Serie"
           android:layout_marginLeft="5dip"
           android:textAppearance="?android:attr/textAppearanceLarge"
           android:id="@+id/serie"
           android:textColor="#f11a15"
           android:textSize="15dp"
           android:layout_toRightOf="@id/logo"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"/>
</RelativeLayout>

Ecco il metodo che ha il compito di creare la lista (che non riesco a modificare come mi servirebbe)

Codice (Java): [Seleziona]
public void creoLista() {

        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

        for (int i = 0; i < listaSerie.getListaSerie().size(); i++) {

            Serie serie = listaSerie.getListaSerie().get(i);
            HashMap<String, Object> listaseriemap = new HashMap<String, Object>();
            listaseriemap.put("logo", getlogo(serie.getLogo()));
            listaseriemap.put("serie", serie.getTitle());
            data.add(listaseriemap);
        }

        String[] from = {"logo","serie"};
        int[] to = {R.id.logo,R.id.serie};

        //costruzione dell adapter
        SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), data, R.layout.serie, from, to);

        //utilizzo dell'adapter
        ((ListView) findViewById(R.id.personListView)).setAdapter(adapter);
        list = (ListView) findViewById(R.id.personListView);
        list.setOnItemClickListener(this);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////



E in fine per scrupolo , il metodo che prende i file dall' SD

Codice (Java): [Seleziona]
public Bitmap getlogo(String id){
        File imgFile = new File(Environment.getExternalStorageDirectory()+"/"+id);
        if(imgFile.exists()){
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            return myBitmap;
        }
        return null;
    }

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:SimpleAdapter con immagini prese da SD e colore di sfondo variabile
« Risposta #1 il: 07 Agosto 2013, 08:55:20 CEST »
0
Invece di usare direttamente SimpleAdapter estendilo e adatta la getView() ai tuoi scopi.
Richiami il super e sulla vista tornata, prima di restituirla al chiamante, imposti lo sfondo come preferisci.
Se spulci in giro per la rete ci sono moltissimi esempi e approcci diversi per farlo, tipo > qui <

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:SimpleAdapter con immagini prese da SD e colore di sfondo variabile
« Risposta #2 il: 07 Agosto 2013, 22:00:16 CEST »
0
Risolto grazie al post sopra il mio, allego per coloro che ne abbiano in futuro bisogno , la mia soluzione


oggetti.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="150dip"
       android:orientation="vertical"
       android:layout_height="wrap_content"
       android:id="@+id/oggettiLinearLayout">

    <ImageView
           android:id="@+id/imgoggetti"
           android:layout_height="109dip"
           android:layout_gravity="center"
           android:layout_width="150dip"/>


    <TextView
           android:text="Oggetti"
           android:id="@+id/titleoggetti"
           android:textColor="#000"
           android:background="#FFF"
           android:textSize="13dip"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:textStyle="bold"/>

    <TextView
           android:text="Descrizioe"
           android:id="@+id/descoggetti"
           android:textColor="#000"
           android:background="#FFF"
           android:textSize="11dip"
           android:layout_marginBottom="10dip"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:textStyle="bold"/>
</LinearLayout>

listaoggetti.xml

Codice (XML): [Seleziona]
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">

    <GridView
       android:id="@+id/gridview"
       android:layout_width="fill_parent"
       android:numColumns="2"
       android:layout_gravity="center"
       android:gravity="center"
       android:layout_height="wrap_content"/>
</LinearLayout>

creolalista()

Codice (Java): [Seleziona]
//CREO FISICAMENTE LA LISTA NELLA UI (NN SO COME MA LO FA)
    //carico dinamicamente le icone e setto i colori led Layout in base all rgb del json
    public void creoGrid() {

        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

        for (int i = 0; i < listaOggetti.getListaOggetti().size(); i++) {

            Oggetto oggetto = listaOggetti.getListaOggetti().get(i);
            HashMap<String, Object> listaseriemap = new HashMap<String, Object>();
            listaseriemap.put("photo", oggetto.getPhoto());
            listaseriemap.put("title", oggetto.getTitle());
            listaseriemap.put("desc", oggetto.getDescription());
            data.add(listaseriemap);
        }

        String[] from = {"logo","title","desc"};
        int[] to = {R.id.imgoggetti,R.id.titleoggetti,R.id.descoggetti};

        SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),data,R.layout.oggetti,from,to){

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View  view = super.getView(position, convertView, parent);
                ImageView logo = (ImageView)view.findViewById(R.id.imgoggetti);
                Map<String,String> data = (Map<String,String>)getItem(position);
                Log.i("json", data.get("photo"));

                logo.setImageBitmap(getlogo(data.get("photo")));
                return view;
            }
        };

        ((GridView) findViewById(R.id.gridview)).setAdapter(adapter);
        grid = (GridView) findViewById(R.id.gridview);
        grid.setOnItemClickListener(this);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////



bitmap

Codice (Java): [Seleziona]
    public Bitmap getlogo(String id){
        File imgFile = new File(Environment.getExternalStorageDirectory()+"/"+id);
        if(imgFile.exists()){
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            return myBitmap;
        }
        return null;
    }