Autore Topic: Trasformare ListView in ExpandableListView - HELP!  (Letto 304 volte)

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Trasformare ListView in ExpandableListView - HELP!
« il: 08 Maggio 2013, 16:39:59 CEST »
0
Ragazzi qui solo un esperto può aiutarmi.
Il bisogno è semplice. Riempire i campi "padre" di una expandableListView allo stesso modo di come ho riempito una ListView con lo stesso CustomAdapter, lo stesso layout e tutto uguale. Poi i "figli" li riempirò successivamente.

In pratica vorrei che all'attuale listView al click si espandesse dando la possibilità di riempire le celle sotto con quello che si vorrà (dati presi in parsing xml).

Attualmente faccio così:

LAYOUT:

main_firstActivity.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical">
       
    <ListView
       android:id="@+id/list"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:divider="#b5b5b5"
       android:dividerHeight="1dp"
       android:listSelector="@drawable/list_selector"
       android:layout_marginBottom="27pt" />

</LinearLayout>

list_rox.xml
(l'elenco di tutti gli oggetti che riempiono la riga)

ACTIVITY PRINCIPALE
CustomizedListView.java

Codice (Java): [Seleziona]
public class CustomizedListView extends Activity {
        // All static variables

        static final String KEY_DISCOUNTED_PRICE = "discounted_price";
        static final String KEY_PRICE = "price";
        static final String KEY_DISCOUNT = "discount";
        static final String KEY_THUMB_URL_SELLER = "seller_image_url";
        static final String KEY_THUMB_URL = "image_url";
        static final String KEY_DESCRIPTION = "description";
        static final String KEY_TITLE_OFFERTA = "title_offerta";       
       

       
        ListView list;
    LazyAdapter adapter;
   
    String contenuto_nodo;
    ArrayList <String> array_contenuto_nodo =new ArrayList<String>();
    ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main_first_activity);
               
                TaskHomePageLista task = new TaskHomePageLista();
                task.execute();
                try {Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


                list=(ListView)findViewById(R.id.list);
               
                // Getting adapter by passing xml data ArrayList
        adapter=new LazyAdapter(this, songsList);        
        list.setAdapter(adapter);
       

        // Click event for single list row
        list.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                                 

                                  }
                                                       

                       
                });            
        }      
        class TaskHomePageLista extends AsyncTask<String, Void, Void> {

               
                protected void onPreExecute(Void... params) {

                }

                protected Void doInBackground(String... args) {

                        //scarico i dati da un file online aspx.
//attendo la risposta in xml
//e riempio le variabili static final string sopra con i dati giusti.
                }
               
                protected void onPostExecute(Void... params) {
                       
                }
               
                }
        }


Infine c'è il mio adapter che non fa altro che prendere i valori delle variabili e riempire la riga.
NB: c'è anche un imageLoader per caricare due immagini ma non dovrebbe essere un problema.

LazyAdapter.java

Codice (Java): [Seleziona]
public class LazyAdapter extends BaseAdapter {
   
    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader;
    public ImageLoader imageLoader_seller;
   
    public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
        imageLoader_seller=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }
   
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.list_row, null);

        TextView price = (TextView)vi.findViewById(R.id.price); // title
        TextView discounted_price  = (TextView)vi.findViewById(R.id.discounted_price); // artist name
        TextView discount = (TextView)vi.findViewById(R.id.discount); // duration
        TextView description = (TextView)vi.findViewById(R.id.description); // duration
        ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
        ImageView thumb_image_seller =(ImageView)vi.findViewById(R.id.list_image_seller); // thumb image
        TextView title_offerta = (TextView)vi.findViewById(R.id.title_offerta);
       
        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(position);
       
        // Setting all values in listview and check when insert PROMO


        price.setText(Html.fromHtml("Valore" + "<BR>" + song.get(CustomizedListView.KEY_PRICE) + " €"));
        title_offerta.setText(song.get(CustomizedListView.KEY_TITLE_OFFERTA));
        discounted_price.setText(song.get(CustomizedListView.KEY_DISCOUNTED_PRICE) + " €");
        discount.setText(Html.fromHtml("Valore" + "<BR>" + song.get(CustomizedListView.KEY_DISCOUNT) + " %"));
        description.setText(song.get(CustomizedListView.KEY_DESCRIPTION));
        imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), thumb_image);
        imageLoader_seller.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL_SELLER), thumb_image_seller);
       
        if(song.get(CustomizedListView.KEY_PRICE).equals(song.get(CustomizedListView.KEY_DISCOUNTED_PRICE))){
                discount.setText(" ");
//              promo.setVisibility(View.VISIBLE);
                discounted_price.setText(Html.fromHtml("PROMO"+ "<BR>" + song.get(CustomizedListView.KEY_DISCOUNTED_PRICE) + " €"));
               
                price.setText(" ");
       
        }
       
        if(song.get(CustomizedListView.KEY_DISCOUNTED_PRICE).equals("0.00")|| song.get(CustomizedListView.KEY_DISCOUNT).equals("0.00") ){
                price.setText(" ");
                discounted_price.setText("PROMO");


               
        }
        return vi;
    }
}

Tutto questo attualmente funziona ed è perfetto. Mi servirebbe trasformare questa listView in una expandable listview e di conseguenza modificare l'adapter in modo da poter cambiare.

Per favore, mi sto impegnando molto ma attualmente la poca esperienza sulle basi si inizia a sentire e non sono molto pratico di adapter e liste.

Grazie per l'interesse.

Ray

Post unito: 09 Maggio 2013, 11:10:39 CEST
Ok ragazzi sto a buon punto. Ho solo un problema con le immagini.

Attualmente sto così:

      SimpleExpandableListAdapter expListAdapter =
         new SimpleExpandableListAdapter(
            this,
            createGroupList(),   // groupData describes the first-level entries
            R.layout.list_row,   // Layout for the first-level entries
            new String[] { KEY_PRICE, KEY_DISCOUNT, KEY_DESCRIPTION, KEY_DISCOUNTED_PRICE, KEY_TITLE_OFFERTA},   // Key in the groupData maps to display
            new int[] { R.id.price, R.id.discount, R.id.description, R.id.discounted_price, R.id.title_offerta},      // Data under "colorName" key goes into this TextView
            
            createChildList(),   // childData describes second-level entries
            R.layout.child_row,   // Layout for second-level entries
            new String[] { "shadeName", "rgb" },   // Keys in childData maps to display
            new int[] { R.id.childname, R.id.rgb }   // Data under the keys above go into these TextViews,
            
         );
      setListAdapter( expListAdapter );

Il problema è che ora nella variabile KEY_IMAGE_URL che devo aggiungere ho la url dell'immagine. Sto tentando di usare image loader ma non riesco ad integrarlo a questo adapter. come posso fare?
« Ultima modifica: 09 Maggio 2013, 11:10:39 CEST da Ray13, Reason: Merged DoublePost »