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 
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 
PS: Como eu não penso nessas coisas antes? 