Autore Topic: ListActivity, Adapter e intent  (Letto 830 volte)

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
ListActivity, Adapter e intent
« il: 22 Ottobre 2011, 11:52:50 CEST »
0
ragazzi è da premettere che non sono molto pratico di android e sto studiando da un manuale dell'apogeo, comunque sto realizzando una mia applicazione e ho creato già la mia pagina iniziale utilizzando una ListActivity e inserendo le stringhe di ogni riga da un array, così ho usato anche un adapter che crea la lista delle opzioni della pagina adattandola all'array... sono riuscito ad inserire anche un immagine diversa accanto ad ogni tipo di riga della lista creata. Adesso voglio far interagire questa pagina con i miei click: voglio poter accedere alla relativa sezione ogni volta che vi clicco su...naturalmente devo ancora creare le altre pagine ma se ho fatto questa velocemente penso che le altre vengano giù da sole... Il problema è che con i bottoni so benissimo come fare ad accedere ad altre pagine, mentre con la ListActivity sto trovando un pò di difficoltà e purtroppo non posso fare altrimenti... Aiutatemi vi prego sono nelle vostre mani!!:D
Adesso vi posto anche l'attività principale che ho creato e qualche altra riga di codice utile a capire l'applicazione:

Questa è la mia attività principale che ho chiamato prova perchè è ancora un prototipo...
Codice (Java): [Seleziona]
package it.android.progetti.prova;


import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;



public class provaActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                // Otteniamo il riferimento all'array dei dati
                String[] arrayData = getResources().getStringArray(R.array.array_data);
                // Creiamo l'ArrayAdapter
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                                this,android.R.layout.simple_list_item_1, arrayData) {
                       
                        public View getView(int position, View convertView, ViewGroup parent) {
                                // Otteniamo la View come fornita dall'Adapter
                                TextView adapterView = (TextView)super.getView(position, convertView, parent);
                                // Sistemiamo l'immagine a seconda dell'indice
                                if(position == 0){
                                        // Caso di indice 0
                                        adapterView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.onoff_button, 0, 0, 0);
                                }else if (position == 1){
                                        // Caso di indice 1
                                        adapterView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.lavatrice, 0, 0, 0);
                                }else if (position == 2){
                                        // Caso di indice 2
                                        adapterView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.iconabatteria, 0, 0, 0);
                                }else if (position == 3){
                                        // Caso di indice 3
                                        adapterView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.meteo, 0, 0, 0);
                                }                              
                                // Ritorniamo la View
                                return adapterView;
                        }
                       

                };
                // Lo impostiamo alla lista
                setListAdapter(arrayAdapter);          
    }
 }

Questo è il file main.xml che contiene il layout:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:paddingLeft="4dp"
        android:paddingRight="4dp" >
        <ListView android:id="@id/android:list" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:background="@color/red"/>
</LinearLayout>

e questa è la schermata che mi appare dopo che apro l'applicazione:



Uploaded with ImageShack.us

Vi ringrazio anticipatamente per l'aiuto!!:D

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListActivity, Adapter e intent
« Risposta #1 il: 22 Ottobre 2011, 19:45:05 CEST »
0
Ciao! Per intercettare i click devi creare un onItemClickListener e settarlo alla listView con il metodo listview.setOnItemClickListener();
Tra l'altro, io cambierei anche due cose nel codice che hai scritto:
- salverei gli id dei drawable in una array di int, così ti basterà scrivere solo una volta il metodo setCompoundDrawable, in cui il primo parametro sarà arrayDegliId[position] invece che R.drawable.x;
- La TextView è già la convertView che ti viene passata, quindi basterebbe solo un cast.
Unendo questi due punti, basterà solo che tu scriva solo questo:
Codice (Java): [Seleziona]
  public View getView(int position, View convertView, ViewGroup parent) {
                             
                                     ( (TextView)  convertView).setCompoundDrawablesWithIntrinsicBounds(arrayDegliId[position], 0, 0, 0);
                     
                                return convertView;
                        }
« Ultima modifica: 22 Ottobre 2011, 19:46:45 CEST da Verandi »

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:ListActivity, Adapter e intent
« Risposta #2 il: 23 Ottobre 2011, 10:31:22 CEST »
0
ok, grazie per la risposta molto esauriente...però non ho capito bene un paio di cosette ancora... il metodo setOnItemClickListener() dove lo devo inserire?? ho pensato di inserirlo subito dopo il setCompoundDrawablesWithIntrinsicBounds() e riferirlo all'adapterView...ma non funziona e mi dice che il metodo setOnItemClickListener() non è definito sul tipo TextView...:((( Seconda cosa come posso creare un array con gli id delle immagini?? Il resto più o meno mi è chiaro...(scusa la mia ignoranza nell'ambiente), grazie ancora per la tua risposta!!:D