Autore Topic: Expandable list view - cambiare colore textview dell'item cliccato  (Letto 545 volte)

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
0
Semplice nel titolo. Obbiettivo: Al click cambiare il colore della textView "padre" dell'item cliccato.

Io sto usando il metodo onGroupExpand:

Per la listview normale so come fare, il problema è che qui uso un SimpleExpandableListAdapter e non ho il metodo del onclick sul gruppo ma ho il metodo onGroupExpand. Ora come ora riesco a cambiare colore solo alla prima textview. In pratica non mi prende la posizione. Sapete come mai? Quando dovrei fare il findviewById? E se la soluzione è nel cambiare adapter è potrei avere un esempio? Grazieeeeeee

P.s: Spero in una risposta visto che in ogni topic in cui si parla di ExpandableLIstView non c'è mai alcuna risposta.

La mia classe:

Codice (Java): [Seleziona]
                                                                     
                                                                     
                                                                     
                                             
package it.anomos.shopandsave.SecondActivityPackage;


import android.annotation.SuppressLint;
import android.app.ExpandableListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;


import it.anomos.shopandsave.R;
import it.anomos.shopandsave.TabBarActivity;

import java.io.InputStream;
import java.lang.reflect.Array;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.ext.Attributes2Impl;

import utils.Costanti;

public class ExpList extends ExpandableListActivity

{
        HashMap<String, String> map = new HashMap<String, String>();
        static final String KEY_MIAKEY = "price";

        int width;
          ArrayList secList = new ArrayList();
          int lastExpandedGroupPosition = 0;
          TextView childname;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle)
    {
       
        super.onCreate(icicle);
        setContentView(R.layout.main_listview_categorie);


                while(TaskListaCategorie.controllo_login_tempo6 != "finito"){
                try {Thread.sleep(300);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
                }
                SimpleExpandableListAdapter expListAdapter =
                        new SimpleExpandableListAdapter(
                                this,
                                TaskListaCategorie.songsList,   // groupData describes the first-level entries
                                R.layout.child_row,     // Layout for the first-level entries
                                new String[] { TaskListaCategorie.KEY_PRICE},   // Key in the groupData maps to display
                                new int[] { R.id.childname },           // Data under "colorName" key goes into this TextView
                                createChildList(),      // childData describes second-level entries
                                R.layout.child_row2,    // Layout for second-level entries
                                new String[] { "shadeName" },   // Keys in childData maps to display
                                new int[] { R.id.childname2 }   // Data under the keys above go into these TextViews
);
setListAdapter( expListAdapter );

    }
    DisplayMetrics metrics = new DisplayMetrics();



    public int GetDipsFromPixel(float pixels)
    {
        // Get the screen's density scale
        final float scale = getResources().getDisplayMetrics().density;
        // Convert the dps to pixels, based on density scale
        return (int) (pixels * scale + 0.5f);
    }

        public void  onGroupExpand  (int groupPosition) {
        try{
            //collapse the old expanded group, if not the same
            //as new group to expand
                Costanti.CATEGORIA_CLICCATA_STRING = TaskListaCategorie.songsList.get(groupPosition).get(Costanti.KEY_PRICE);
                System.out.println(Costanti.CATEGORIA_CLICCATA_STRING);
               
                childname.findViewById(R.id.childname);
//                      childname = (TextView)findViewById(R.id.childname);
               
                System.out.println("testo cliccato: " +childname.getText().toString());
                childname.setTextColor(Color.GREEN);

             System.out.println("Group exapanding Listener => groupPosition = " + groupPosition);
        }catch(Exception e){
            System.out.println(" groupPosition Errrr +++ " + e.getMessage());
        }
    }

//    @Override
//    public void onGroupCollapse(int groupPosition) {
//        try{
//               childname = (TextView)findViewById(R.id.childname);
//             
//              childname.setTextColor(Color.BLACK);
//             System.out.println("Group callback Listener => groupPosition = " + groupPosition);
//        }catch(Exception e){
//            System.out.println(" groupPosition Errrr +++ " + e.getMessage());
//        }
//      // TODO Auto-generated method stub
//      super.onGroupCollapse(groupPosition);
//    }

    @Override
    public boolean onChildClick(ExpandableListView arg0,
            View arg1, int arg2, int arg3, long arg4) {
     Log.d("skt", "clicked parent " + arg2 + " child "
                 + arg3);
     Costanti.CATEGORIA_CLICCATA = arg2;
     Costanti.SOTTOCATEGORIA_CLICCATA = arg3;

        metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        width = metrics.widthPixels;
        //this code for adjusting the group indicator into right side of the view
        metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        width = metrics.widthPixels;

                arg0.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10));
               
          int m = -1;

        for( int i = 0 ; i <= arg2 ; i++ ) {
                  int lunghezza_sottocategoria = TaskListaCategorie.lista.get(i);
                for( int n = 0 ; n < lunghezza_sottocategoria-1 ; n++ ) {
               
                m++;
                if(arg2==i){
                        if(n == arg3){
                                break;

                        }
                }
               
                }
        }
//     m č il numero nell'array delle sottocategorie ^^

        System.out.println("Il nome dell'item selezionato č: " + TaskListaCategorie.array_contenuto_nodo_2.get(m));
        Costanti.SOTTOCATEGORIA_CLICCATA_STRING = TaskListaCategorie.array_contenuto_nodo_2.get(m);
       
        System.out.println("La posizione dell'item č: " + m);
        System.out.println("L'id dell'item selezionato č: " + TaskListaCategorie.array_child_id.get(m));
        String id_sottocategoria = "id_sottocategoria";
//    Intent ii=new Intent(this, PaginaDettaglioCategorie.class);
//    ii.putExtra("id_sottocategoria", id_sottocategoria);
//    startActivity(ii);

    Intent previewMessage = new Intent(getParent(), PaginaDettaglioCategorie.class);
    TabGroupActivity2 parentActivity = (TabGroupActivity2)getParent();
    previewMessage.putExtra("id_sottocategoria", TaskListaCategorie.array_child_id.get(m));
    parentActivity.startChildActivity("PaginaDettaglioCategorie", previewMessage);
   
        return false;
     
    }

  private List createChildList() {
          int m = -1;
 
        ArrayList result = new ArrayList();
        for( int i = 0 ; i < 15 ; i++ ) {
                  ArrayList secList = new ArrayList();
                  int lunghezza_sottocategoria = TaskListaCategorie.lista.get(i);
                for( int n = 0 ; n < lunghezza_sottocategoria-1 ; n++ ) {
               
                m++;
                       
            HashMap child = new HashMap();
                child.put( "shadeName", TaskListaCategorie.array_contenuto_nodo_2.get(m));
                System.out.println(m);
                secList.add( child );
                }
          result.add( secList );
        }
        return result;
  }
 
  @Override
  public void onBackPressed() {
      // do nothing.
  }
}

Ah, non so se si capisce molto (non so se è importante) ma i dati li prendo da un parsing xml facendo partire un asynktask da un'altra activity. Comunque l'importante è che la textView padre childname cambi colore nella posizione cliccata (e ovviamente tutte le altre diventino nere)

Si accettano tutti i tipi di consigli possibili
« Ultima modifica: 01 Giugno 2013, 21:18:13 CEST da Ray13 »