[RESOLVIDO] Modificar o background do textview ao voltar para activity

Oi gente,
Consegui fazer com que o background do textview mude ao ser clicado,porém quando ele retorna para activity em que esse textview foi modificado as cores continuam as mesmas que eu setei para mudar de cor.

Trecho código onde essa mudança ocorre:

		  //Encaminhando para o canal Fortaleza
		   fortaleza.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {	
					fortaleza.setTextColor(getResources().getColor(R.color.text_bg));
					fortaleza.setBackgroundColor(getResources().getColor(R.color.cnFortaleza));
					
					Intent it = new Intent(TelaInicial.this, ListarNoticias.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "fortaleza");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});

Será que alguém sabe porque ele mantém ou se tem alguma maneira de voltar as cores ‘originais’?

Quando sua Activity volta da stack (a que está no topo foi terminada) o método onResume é invocado, voce pode retornar o estado da sua tela por ai.

Olá,

Esse código que você postou está no onCreate?

Bom, quando o usuário está interagindo com a tela a Activity já passou por:

onCreate -> onStart -> onResume

Quando o startActivity é chamado o Android chama

onPause -> onStop na sua Activity

Depois que você volta da ListaNoticias o Android chama os seguintes métodos da TelaInicial:

onStart -> onResume

Durante esse tempo todo a Activity não foi recriada, ou seja, quaisquer mudanças feitas na tela durante esse tempo vão continuar lá. O estado da tela é preservado.
Se você quiser voltar para as cores originais você vai ter que setar os valores originais na mão no método onResume por exemplo.

public class TelaInicial extends Activity {

    // ... resto do código ...

    protected void onResume() {
        fortaleza.setTextColor(getResources().getColor(R.color.texto_original));
        fortaleza.setBackgroundColor(getResources().getColor(R.color.background_original));
    }

Oi meninos,
Obrigada pela dica :smiley:

Tentei fazer como vocês disseram,mas está dando erro de NullPointer.
Explicarei a minha activity:
Ela inicia com o carregamento de um Splash Screen e o uso do Asynctask para carregar as informações dos destaques da minha página.
Quando eu coloco o onResume logo abaixo e declaro as cores que eu desejo que sejam setadas ao voltar para essa activity dá esse erro de NullPointer.
Olha o código:

@Override
	protected void onResume() {
		super.onResume();
		
		fortaleza = (TextView) findViewById(R.main.fortaleza);
		fortaleza.setTextColor(getResources().getColor(R.color.cnFortaleza));
	}

Meu log com o erro:

02-24 10:54:39.116: E/AndroidRuntime(660): Uncaught handler: thread main exiting due to uncaught exception
02-24 10:54:39.126: E/AndroidRuntime(660): java.lang.RuntimeException: Unable to resume activity {br.com.android.activity/br.com.jornalopovo.android.activity.TelaInicial}: java.lang.NullPointerException
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2516)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.os.Handler.dispatchMessage(Handler.java:99)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.os.Looper.loop(Looper.java:123)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.ActivityThread.main(ActivityThread.java:4363)
02-24 10:54:39.126: E/AndroidRuntime(660): at java.lang.reflect.Method.invokeNative(Native Method)
02-24 10:54:39.126: E/AndroidRuntime(660): at java.lang.reflect.Method.invoke(Method.java:521)
02-24 10:54:39.126: E/AndroidRuntime(660): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-24 10:54:39.126: E/AndroidRuntime(660): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-24 10:54:39.126: E/AndroidRuntime(660): at dalvik.system.NativeStart.main(Native Method)
02-24 10:54:39.126: E/AndroidRuntime(660): Caused by: java.lang.NullPointerException
02-24 10:54:39.126: E/AndroidRuntime(660): at br.com.jornalopovo.android.activity.TelaInicial.onResume(TelaInicial.java:43)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.Activity.performResume(Activity.java:3763)
02-24 10:54:39.126: E/AndroidRuntime(660): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)

Alguma ideia?!

O findViewById devolve null se não conseguiu encontrar o elemento com esse id na tela. Você colocou o setContentView no onCreate?
Aquele onClickListener que você definiu estava em que método? Ele tinha acesso a esse TextView que você quer, não tinha?

Eu o coloquei no meu onPostExecute, porque eu carrego a tela do Splash Screen no onPreExecute.
Os clicks para a activity ListaNoticia está também no onPostExecute. Vou colocar minha classe inteira aqui >.<

public class TelaInicial extends Activity {
	
	// Lista de noticias da capa
	ListView imagensDestaques;
	ListView listaCanais;		
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);	
		
		new CarregarInformacoesApp().execute();
	}
		
	//Classe que sincroniza o carregamento das informações do APP
	public class CarregarInformacoesApp extends AsyncTask<Void, Integer, Void>{
		//CANAIS
		TextView fortaleza;
		TextView politica;
		TextView economia;
		TextView esportes;
		TextView divirtase;
		TextView maisnoticias;
		TextView charges;
		TextView cinema;
		TextView fotos;
		
		boolean conectado = isOnline();
		
		//Verifica se está conectado
		private Boolean isOnline()	{
	    	ConnectivityManager cm = 
	    	  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
	    	NetworkInfo ni = cm.getActiveNetworkInfo();
	    	if(ni != null && ni.isConnected())
	    		return true;

	    	return false;
	    }
		
		/* VARIAVEIS */			
		// Adapters
		DestaquesCapaAdapter capaDestaques;	
		//DestaquesListaCanaisAdapter listaCanaisAdapter;
			
		//Lista dos xml
		List<CapaDestaques> capa;	
			
		//Carregamento
			public ProgressBar loadBar;
			int myProgress;
		
	   
	    
		@Override
		protected Void doInBackground(Void... params) {
			
		  if(isOnline()){	
		   //Carregamento da progress bar	  
			publishProgress(myProgress);			
			  
		   //Carregar os XML's
			CarregarXML destaque = new CarregarXML();
			FotosCapaController capaFotos = new FotosCapaController();
			
			/* Listas a serem carregadas */
			
			//Carregamento da progress bar
			myProgress = myProgress+35;
			publishProgress(myProgress);
			
			//Imagens Destaques
			capa = capaFotos.getFotoNoticia();
			
			
			/* ADAPTERS */
			//Carrega as imagens da tela inicial
			capaDestaques = new DestaquesCapaAdapter(TelaInicial.this, capa);

			
		  }		
			
		   return null;
			
		}
		
		protected void onPreExecute(){
			setContentView(R.layout.capa_aplicativo);
			loadBar = (ProgressBar) findViewById(R.imagemcapa.load);
			myProgress = 0;
			super.onPreExecute();
		}
		
		protected void onProgressUpdate(Integer...value) {
			loadBar.setProgress(value[0]);
		}
		
		
		protected void onPostExecute(Void result){ 
			super.onPostExecute(result);
			
		   if(isOnline()){	
			//Setando o contexto
			setContentView(R.layout.main);
			
			/* CARREGAR AS LISTAS */
			imagensDestaques = (ListView) findViewById(R.main.listaImagensDestaques);			
			
		  //Dados a serem carregados	
			fortaleza = 
			  (TextView) findViewById(R.main.fortaleza);
	   	    fortaleza.setTextColor(getResources().getColor(R.color.cnFortaleza));
			
			politica = 
			  (TextView) findViewById(R.main.politica);
			politica.setTextColor(getResources().getColor(R.color.cnPolitica));
			
			economia = 
			   (TextView) findViewById(R.main.economia);
			economia.setTextColor(getResources().getColor(R.color.cnEconomia));
			
			esportes = 
			   (TextView) findViewById(R.main.esportes);
			esportes.setTextColor(getResources().getColor(R.color.cnEsportes));
			
			divirtase = 
			   (TextView) findViewById(R.main.divirtase);
			divirtase.setTextColor(getResources().getColor(R.color.cnDivirtase));
			
			maisnoticias = 
			   (TextView) findViewById(R.main.maisnoticia);
			maisnoticias.setTextColor(getResources().getColor(R.color.cnMaisNoticias));
			
			charges = 
			    (TextView) findViewById(R.main.charges);
			cinema = 
				(TextView) findViewById(R.main.cinema);
			fotos = 
				(TextView) findViewById(R.main.fotos);
			
		   /* FIM DAS LISTAS */
			
		  //Setando os adapters	
		    imagensDestaques.setAdapter(capaDestaques);		   
		   //listaCanais.setAdapter(listaCanaisAdapter);
		   
		  //Encaminhando para o canal Fortaleza
		   fortaleza.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {	
					fortaleza.setTextColor(getResources().getColor(R.color.text_bg));
					fortaleza.setBackgroundColor(getResources().getColor(R.color.cnFortaleza));
					
					Intent it = new Intent(TelaInicial.this, ListarNoticias.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "fortaleza");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
		   
		 //Encaminhando para o canal Politica
		   politica.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, ListarNoticias.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "politica");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
		   
		 //Encaminhando para o canal Economia
		   economia.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, ListarNoticias.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "economia");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
		   
		 //Encaminhando para o canal Esportes
		   esportes.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, ListarNoticias.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "esportes");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
		   
		   
		 //Encaminhando para o canal Divirtase
		   divirtase.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, ListarNoticias.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "divirtase");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);					
					
				}
			});
		   
		   
		 //Encaminhando para o canal Mais Noticias
		   maisnoticias.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, ListarNoticias.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "maisnoticias");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
		   
		   
		 //Encaminhando para o canal Charges
		   charges.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, NoticiaInternaImagens.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "charges");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
		   
		   
		 //Encaminhando para o canal Cinema
		   cinema.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, NoticiaInternaCinema.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "cinema");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
		   
		   
		 //Encaminhando para o canal Fotos
		   fotos.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					Intent it = new Intent(TelaInicial.this, NoticiaInternaImagens.class);
					
					Bundle parametros = new Bundle();
					parametros.putString("tipo", "fotos");
					
					it.putExtras(parametros);
					view.getContext().startActivity(it);
					
					
				}
			});
	
			
		 }else{
			 
			//Exibindo a informação de que o usuário não está conectado a internet
			Toast.makeText(TelaInicial.this, "Não há conexão.", Toast.LENGTH_LONG).show();
		 }
				
	  }		
 } //FIM CLASSE ASYNCTASK
	
	

}

Acho que entendi!
Bom, o onResume é chamado provavelmente antes do AsyncTask terminar, então a tela que está sendo mostrada nessa hora é o splash, que realmente não tem o TextView… então o findViewById vai devolver null.
Como inicialmente eu suponho que ele vai mostrar a cor certa, você só quer que ao voltar da outra Activity ele recarregue a cor inicial, certo?

Nesse caso, no onResume tente só colocar um if mesmo:

protected void onResume() {
    super.onResume();

    fortaleza = (TextView) findViewById(R.main.fortaleza);
    if(fortaleza != null) {
        fortaleza.setTextColor(getResources().getColor(R.color.cnFortaleza));
    }
}

Assim ele não vai tentar mudar a cor na primeira vez, pois estará no splash, mas quando voltar de outra activity ele reseta a cor.

Puta merda FUNCIONOU ! lol
Valeeeeeeeeeeeeeeeeeeeeu !

Obrigada :wink:

PS: Como eu não penso nessas coisas antes? :frowning: