Autore Topic: colorare da codice items di listview  (Letto 1495 volte)

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
colorare da codice items di listview
« il: 21 Marzo 2011, 17:14:11 CET »
0
Salve a tutti nella mia applicazione ho diverse listview,volevo sapere se c'era un modo per attribuire da codice il core anche rgb di ogni item senza dover utilizzare file risorse.
Grazie

frusso

  • Visitatore
Re:colorare da codice items di listview
« Risposta #1 il: 21 Marzo 2011, 17:33:55 CET »
0
Non credo di aver capito la domanda.

Tu vouoi cambiare il colore di ogni singola riga di una stessa listView o vuoi che tutte le listView abbiano lo stesso colore ?

Nel primo caso devi ridefinire il metodo getView dell'adapter e impostare (da codice) il colore della riga (o del testo nella riga) in base a parametri applicativi, nel secondo caso è sicuramente meglio creare uno stile tuo ed assegnarlo a tutte le listView, in modo da centralizzare le modifiche.

Nel primo un caso un esempio di codice (volutamente stupido) è questo

Codice (Java): [Seleziona]
 private void populateList(List<String> data) {
       
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 0, data) {
               
                public View getView(int position, View convertView, android.view.ViewGroup parent) {
                        if (convertView == null) {
                                LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
                                convertView = inflater.inflate(R.layout.listview_main, null);
                        }
                        TextView firstRow = (TextView) convertView.findViewById(R.id.mainlv_feedName);
                       
                        String item = getItem(position);
                        firstRow.setText(item);
                        if (item.startsWith("A")) firstRow.setTextColor(Color.GRAY);
                        else firstRow.setTextColor(Color.GREEN);
                       
                        return convertView;
                };
        };
       
    }

dove si cambia il colore del testo se il testo inizia per A


Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:colorare da codice items di listview
« Risposta #2 il: 21 Marzo 2011, 18:05:45 CET »
0
Ciao grazie per la risposta intendevo dire che nel mio applicativo i colori sono presenti in una tabella e sono in valore rgb ma possono essere diversi e stabiliti dal cliente finale.Detto questo avrei la necessità di colorare le celle in base a quello che la tabella ha come colore.

Io carico il record con il db.rawQuery poi riempio un arraylist ciclando e poi passo tutto al simpleadapter che a sua volta binda la listview.

l'unica cosa ripeto che volevo inserire prima suppondo di fare il bind della listview e attribuire il colore alle celle.

Spero di essere stato piu' chiaro

Grazie

frusso

  • Visitatore
Re:colorare da codice items di listview
« Risposta #3 il: 21 Marzo 2011, 18:09:58 CET »
0
Quindi devi convertire delle stringhe che rappresentano dei colori in oggetti Color per poter poi "colorare" la tua riga

Codice (Java): [Seleziona]
  String myColor = "#" + pref.getString(Const.PREF_KEY_subtitleTextColor, "B2B2B2");
  myTextView.setTextColor(Color.parseColor(myColor));

Spero che questo possa esserti utile. Adattalo alle tue esigenze.

Ciao

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:colorare da codice items di listview
« Risposta #4 il: 21 Marzo 2011, 18:19:11 CET »
0
Questo è il codice di cui ti parlavo prima nel while o prima dell'adapter è da definire il metodo per colorare each row
ma non ho idea di come farlo

Codice (Java): [Seleziona]
 public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                 setContentView(R.layout.categ);
                 
                 ArrayList<HashMap<String, Object>> lista = new ArrayList<HashMap<String, Object>>();  
                mView = (ListView) findViewById(R.id.lstCateg);
                String[] nome={"Name"};
                int[] reso={R.id.Name};
                Cursor c =null; //inizializzo il cursore
                String sql="select idcat,nome from categorie order by nome " ;
               
                try{
                        db=openOrCreateDatabase(DB_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);
                        c= db.rawQuery(sql, null);
                        startManagingCursor(c);                                        
                       
                        while (c.moveToNext()) {
                                HashMap<String,Object> data = new HashMap<String,Object> ();
                                data.put("Name",c.getString(1));
                            data.put("idcat",c.getString(0) );
                        lista.add(data);
                        }
                        c=null;
                       
                     SimpleAdapter sp=new SimpleAdapter(this, lista,R.layout.categ_item , nome, reso);
                   
               
                   

                     mView.setAdapter(sp);
                     
                     mView.setOnItemClickListener(new OnItemClickListener() {    
                        //AdapterView<?> a, View v, int position, final long id
                        public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {              
                               mView.setSelection(arg2);
                               @SuppressWarnings("unchecked")
                                        HashMap<String, Object> p=(HashMap<String,Object>) mView.getItemAtPosition(arg2);
                               Collection<Object> co=p.values();
                               Object[] l=  co.toArray();
                               Intent i = new Intent(arg1.getContext(),Portate.class);
                               String pkg=getPackageName();
                               String c="" + l[0];
                               i.putExtra(pkg+".myString", c);

                               startActivity(i);
                        }
                    });
             
                }catch (SQLiteException e){
                        Log.d("Portate", e.getMessage());
                 e.printStackTrace();
                }
               
            }

       
       
       
       
        }

frusso

  • Visitatore
Re: colorare da codice items di listview
« Risposta #5 il: 21 Marzo 2011, 23:32:15 CET »
0
Utilizzando un SimpleAdapter non ci riuscirai mai

Primo non fare tutto nel create ma modularizia meglio le operazioni (ti consiglio ad esempio di caricare la lista nel metodo onResume)

Poi guarda il mio metodo che ti ho postato prima. Utilizza una classe anonima che ridefinisce il metodo

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:colorare da codice items di listview
« Risposta #6 il: 22 Marzo 2011, 11:18:24 CET »
0
acolta siccome sono nuovo su android ed ho utlizzato un arraylist<String,Object> non so come gestire Arrayadapter potresti darmi una mano?
Grazie

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:colorare da codice items di listview
« Risposta #7 il: 23 Marzo 2011, 12:01:54 CET »
+1
Son contento di aver risolto io semplicemente continuando ad utilizzare il SimpleAdapter e facendo l'override del metodo getView che mi sconsigliava qualcuno di utilizzare con il simpleadapter. Questo è quello che ho fatto:

Codice (Java): [Seleziona]
  SimpleAdapter sp=new SimpleAdapter(this, lista,R.layout.categ_item , nome, reso){
                         
                         @Override
                         public View getView(int position, View convertView, ViewGroup parent) {
                                 if (convertView==null){
                                         LayoutInflater inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                         convertView=inflater.inflate(R.layout.categ_item, null);
                                 }
                                 Object r=getItem(position);
                                 HashMap <String, Object> r1=new HashMap<String,Object>();
                                 r1.put("colore", getItem(2));
                                 View row = super.getView(position, convertView, parent);
                                 String[]Splitta=r.toString().split(",");
                                 String Splitta2=Splitta[2];
                                 String[] Splitta3=Splitta2.split("=");
                                 String col=Splitta3[1];
                                 col=col.replace("-", "");
                                 col=col.replace("}", "");
                                 
                                 if (col.length()< 8){
                                         col="#" + MettiCanc(col, 8);
                                 }else{
                                         col="#" + col;
                                 }
                                 Log.d("Colore Elab:", col);
                                 row.setBackgroundColor(Color.parseColor(col));
                                 return row;
                                 
                         }
                     };
                     mView.setAdapter(sp);

e questo è il risultato:


Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:colorare da codice items di listview
« Risposta #8 il: 30 Maggio 2012, 10:29:57 CEST »
0
Son contento di aver risolto io semplicemente continuando ad utilizzare il SimpleAdapter e facendo l'override del metodo getView che mi sconsigliava qualcuno di utilizzare con il simpleadapter. Questo è quello che ho fatto:

Codice (Java): [Seleziona]
  SimpleAdapter sp=new SimpleAdapter(this, lista,R.layout.categ_item , nome, reso){
                         
                         @Override
                         public View getView(int position, View convertView, ViewGroup parent) {
                                 if (convertView==null){
                                         LayoutInflater inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                         convertView=inflater.inflate(R.layout.categ_item, null);
                                 }
                                 Object r=getItem(position);
                                 HashMap <String, Object> r1=new HashMap<String,Object>();
                                 r1.put("colore", getItem(2));
                                 View row = super.getView(position, convertView, parent);
                                 String[]Splitta=r.toString().split(",");
                                 String Splitta2=Splitta[2];
                                 String[] Splitta3=Splitta2.split("=");
                                 String col=Splitta3[1];
                                 col=col.replace("-", "");
                                 col=col.replace("}", "");
                                 
                                 if (col.length()< 8){
                                         col="#" + MettiCanc(col, 8);
                                 }else{
                                         col="#" + col;
                                 }
                                 Log.d("Colore Elab:", col);
                                 row.setBackgroundColor(Color.parseColor(col));
                                 return row;
                                 
                         }
                     };
                     mView.setAdapter(sp);

e questo è il risultato:

Ciao, il tuo codice funziona perfettamente. Io avrei bisogno però di cambiare il colore di un singolo TextView contenuto nel mio Item.
Sapresti come posso fare?

Grazie
Mattia
Tutto quello che c'è da sapere sul mobile advertising
AdBanner