Colori in base a valore stringa

di Anonimizzato14151 il
21 risposte
Come posso fare per dare un colore a determinati valori prelevati da DB e visualizzati in un listview. Nello specifico, se ad esempio visualizzo una lista contenente delle M vorrei che queste M fossero visualizzate in rosso rispetto gli altri valori.

Inviato dal mio GT-H9500 utilizzando Tapatalk

21 Risposte

  • In pratica devi creare un adapter personalizzato ed effettuare l'override del metodo "getView". In particolare in questo metodo metterai la logica che ti permette di colorare il testo di una textview (o comunque la view d'interesse)


    Sent from my iPhone using Tapatalk
  • Come sempre disponibile all'aiuto, grazie, confesso però che non ci ho capito molto, in parole povere, devo intervenire sul display adapter??
    public class DisplayAdapter extends BaseAdapter {
    	private Context mContext;
    	private ArrayList<String> id;
    	private ArrayList<String> turnoName;
    	private ArrayList<String> oreName;
    	
    	
    
    	public DisplayAdapter(Context c, ArrayList<String> id,ArrayList<String> ore,ArrayList<String> turno) {
    		this.mContext = c;
    
    		this.id = id;
    		this.turnoName = turno;
    		this.oreName = ore;
    	}
    
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return id.size();
    	}
    
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	public long getItemId(int position) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	public View getView(int pos, View child, ViewGroup parent) {
    		Holder mHolder;
    		LayoutInflater layoutInflater;
    		if (child == null) {
    			layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    			child = layoutInflater.inflate(R.layout.row, null);
    			mHolder = new Holder();
    			mHolder.txt_turno = (TextView) child.findViewById(R.id.txt_turno);
    			mHolder.txt_ore = (TextView) child.findViewById(R.id.txt_ore);
    			mHolder.txt_id = (TextView) child.findViewById(R.id.txt_id);
    			child.setTag(mHolder);
    		} else {
    			mHolder = (Holder) child.getTag();
    		}
    		mHolder.txt_turno.setText(turnoName.get(pos));
    		mHolder.txt_ore.setText(oreName.get(pos));
    
    		return child;
    	}
    
    	public class Holder {
    		TextView txt_turno;
    		TextView txt_ore;
    		TextView txt_id;
    	}
    }
    
    o crearne uno diverso?
  • No quello va bene..la domanda è: quale delle 3 text view vuoi colorare? Semplicemente basta che ne controlli il contenuto e, nel caso corrisponda a quello desiderato, ne imposti il colore a rosso..


    Sent from my iPhone using Tapatalk
  • In questo caso, vorrei che se nella colonna relativa al turno sia presente una M vorrei che questa venisse colorata di rosso,mentre se valore F di Giallo.
  • 	mHolder.txt_turno.setText(turnoName.get(pos));
    String nomeTurno = turnoName.get(pos);
    if (nomeTurno.equals("M"))
        mHolder.txt_turno.setColor(Color.RED);
    else if (nomeTurno.equals("F"))
        mHolder.txt_turno.setColor(Color.YELLOW);
    else
        mHolder.txt_turno.setColor(Color.BLACK);
    
    
    L'ho scritto da cellulare, quindi può esserci qualche errore, ma l'idea è quella


    Sent from my iPhone using Tapatalk
  • Non so come fai da cellulare, ma e quasi tutto ok, mi da errore nel
    mHolder.txt_turno.setColor(Color.RED);
    Non arrivo a capire cosa vuole nel setColor.
  • Il metodo è "setTextColor", mi ero sbagliato


    Sent from my iPhone using Tapatalk
  • Ok, grazie, nel frattempo ero riuscito a capire, solo che a modifica effettuata, l'app si blocca,
    attualmente ho fatto:
    public View getView(int pos, View child, ViewGroup parent) {
    		Holder mHolder;
    		LayoutInflater layoutInflater;
    		if (child == null) {
    			layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    			child = layoutInflater.inflate(R.layout.row, null);
    			mHolder = new Holder();
    			mHolder.txt_turno = (TextView) child.findViewById(R.id.txt_turno);
    			mHolder.txt_ore = (TextView) child.findViewById(R.id.txt_ore);
    			mHolder.txt_id = (TextView) child.findViewById(R.id.txt_id);
    			child.setTag(mHolder);
    		} else {
    			mHolder = (Holder) child.getTag();
    		}
    		mHolder.txt_turno.setText(turnoName.get(pos));
    		 String nomeTurno = turnoName.get(pos);
    		 if (nomeTurno.equals("M"))
    		     mHolder.txt_turno.setTextColor(Color.RED);
    		 else if (nomeTurno.equals("F"))
    		     mHolder.txt_turno.setTextColor(Color.YELLOW);
    		 else
    		     mHolder.txt_turno.setTextColor(Color.BLACK);
    		 
    		mHolder.txt_ore.setText(oreName.get(pos));
    		mHolder.txt_id.setText(dataName.get(pos));
    
    		return child;
    	}
    ma l'app mi da un fatal error
    04-16 14:19:43.275: E/AndroidRuntime(11365): FATAL EXCEPTION: main
    04-16 14:19:43.275: E/AndroidRuntime(11365): java.lang.NullPointerException
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at com.turniDB.DisplayAdapter.getView(DisplayAdapter.java:65)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.AbsListView.obtainView(AbsListView.java:2033)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.ListView.makeAndAddView(ListView.java:1772)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.ListView.fillDown(ListView.java:672)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.ListView.fillFromTop(ListView.java:732)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.ListView.layoutChildren(ListView.java:1611)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.AbsListView.onLayout(AbsListView.java:1863)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.View.layout(View.java:11278)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewGroup.layout(ViewGroup.java:4224)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.os.Looper.loop(Looper.java:137)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at java.lang.reflect.Method.invokeNative(Native Method)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at java.lang.reflect.Method.invoke(Method.java:511)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    04-16 14:19:43.275: E/AndroidRuntime(11365): 	at dalvik.system.NativeStart.main(Native Method)
    04-16 14:19:43.655: I/dalvikvm(11365): threadid=3: reacting to signal 3
    04-16 14:19:43.686: I/dalvikvm(11365): Wrote stack traces to '/data/anr/traces.txt'
    04-16 14:19:43.905: I/dalvikvm(11365): threadid=3: reacting to signal 3
    04-16 14:19:43.925: I/dalvikvm(11365): Wrote stack traces to '/data/anr/traces.txt'
    04-16 14:21:16.325: I/Process(11365): Sending signal. PID: 11365 SIG: 9
    
  • Qual è la riga 65 del display adapter?


    Sent from my iPhone using Tapatalk
  • Questa e la 65
    if (nomeTurno.equals("M"))
    Mi è venuto un dubbio, attualmente la colonna turno e null, ossia vuota, non è che sia questa la causa?
  • In realtà non è detto, dipende da come popoli "turnoName". In questo caso evidentemente è a null!


    Sent from my iPhone using Tapatalk
  • Effettivamente non dipende dal null infatti ho provato a editare il db mettendo un M a turno ma non cambia nulla,sempre lo stesso errore
  • Beh comunque "nomeTurno" è a null, e questo significa che l'array (o lista) "turnoName" contiene valori nulli


    Sent from my iPhone using Tapatalk
  • Cosa strana, ho provato ad applicare il cambio colore ad un'altra colonna e funziona perfettamente, adesso sono ancora più confuso del perchè sulla colonna turno non va
Devi accedere o registrarti per scrivere nel forum
21 risposte