Colori in base a valore stringa

di il
21 risposte

Colori in base a valore stringa

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

  • Re: Colori in base a valore stringa

    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
  • Re: Colori in base a valore stringa

    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?
  • Re: Colori in base a valore stringa

    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
  • Re: Colori in base a valore stringa

    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.
  • Re: Colori in base a valore stringa

    	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
  • Re: Colori in base a valore stringa

    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.
  • Re: Colori in base a valore stringa

    Il metodo è "setTextColor", mi ero sbagliato


    Sent from my iPhone using Tapatalk
  • Re: Colori in base a valore stringa

    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
    
  • Re: Colori in base a valore stringa

    Qual è la riga 65 del display adapter?


    Sent from my iPhone using Tapatalk
  • Re: Colori in base a valore stringa

    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?
  • Re: Colori in base a valore stringa

    In realtà non è detto, dipende da come popoli "turnoName". In questo caso evidentemente è a null!


    Sent from my iPhone using Tapatalk
  • Re: Colori in base a valore stringa

    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
  • Re: Colori in base a valore stringa

    Beh comunque "nomeTurno" è a null, e questo significa che l'array (o lista) "turnoName" contiene valori nulli


    Sent from my iPhone using Tapatalk
  • Re: Colori in base a valore stringa

    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