[RESOLVIDO] Modificar o background do textview ao voltar para activity
7 respostas
T
temonteiro
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 Fortalezafortaleza.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){fortaleza.setTextColor(getResources().getColor(R.color.text_bg));fortaleza.setBackgroundColor(getResources().getColor(R.color.cnFortaleza));Intentit=newIntent(TelaInicial.this,ListarNoticias.class);Bundleparametros=newBundle();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.
T
toshikurauchi
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.
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:
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?
T
temonteiro
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 >.<
publicclassTelaInicialextendsActivity{// Lista de noticias da capaListViewimagensDestaques;ListViewlistaCanais;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);newCarregarInformacoesApp().execute();}//Classe que sincroniza o carregamento das informações do APPpublicclassCarregarInformacoesAppextendsAsyncTask<Void,Integer,Void>{//CANAISTextViewfortaleza;TextViewpolitica;TextVieweconomia;TextViewesportes;TextViewdivirtase;TextViewmaisnoticias;TextViewcharges;TextViewcinema;TextViewfotos;booleanconectado=isOnline();//Verifica se está conectadoprivateBooleanisOnline(){ConnectivityManagercm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfoni=cm.getActiveNetworkInfo();if(ni!=null&&ni.isConnected())returntrue;returnfalse;}/* VARIAVEIS */// AdaptersDestaquesCapaAdaptercapaDestaques;//DestaquesListaCanaisAdapter listaCanaisAdapter;//Lista dos xmlList<CapaDestaques>capa;//CarregamentopublicProgressBarloadBar;intmyProgress;@OverrideprotectedVoiddoInBackground(Void...params){if(isOnline()){//Carregamento da progress bar publishProgress(myProgress);//Carregar os XML'sCarregarXMLdestaque=newCarregarXML();FotosCapaControllercapaFotos=newFotosCapaController();/* Listas a serem carregadas *///Carregamento da progress barmyProgress=myProgress+35;publishProgress(myProgress);//Imagens Destaquescapa=capaFotos.getFotoNoticia();/* ADAPTERS *///Carrega as imagens da tela inicialcapaDestaques=newDestaquesCapaAdapter(TelaInicial.this,capa);}returnnull;}protectedvoidonPreExecute(){setContentView(R.layout.capa_aplicativo);loadBar=(ProgressBar)findViewById(R.imagemcapa.load);myProgress=0;super.onPreExecute();}protectedvoidonProgressUpdate(Integer...value){loadBar.setProgress(value[0]);}protectedvoidonPostExecute(Voidresult){super.onPostExecute(result);if(isOnline()){//Setando o contextosetContentView(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 Fortalezafortaleza.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){fortaleza.setTextColor(getResources().getColor(R.color.text_bg));fortaleza.setBackgroundColor(getResources().getColor(R.color.cnFortaleza));Intentit=newIntent(TelaInicial.this,ListarNoticias.class);Bundleparametros=newBundle();parametros.putString("tipo","fortaleza");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Politicapolitica.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,ListarNoticias.class);Bundleparametros=newBundle();parametros.putString("tipo","politica");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Economiaeconomia.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,ListarNoticias.class);Bundleparametros=newBundle();parametros.putString("tipo","economia");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Esportesesportes.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,ListarNoticias.class);Bundleparametros=newBundle();parametros.putString("tipo","esportes");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Divirtasedivirtase.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,ListarNoticias.class);Bundleparametros=newBundle();parametros.putString("tipo","divirtase");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Mais Noticiasmaisnoticias.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,ListarNoticias.class);Bundleparametros=newBundle();parametros.putString("tipo","maisnoticias");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Chargescharges.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,NoticiaInternaImagens.class);Bundleparametros=newBundle();parametros.putString("tipo","charges");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Cinemacinema.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,NoticiaInternaCinema.class);Bundleparametros=newBundle();parametros.putString("tipo","cinema");it.putExtras(parametros);view.getContext().startActivity(it);}});//Encaminhando para o canal Fotosfotos.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Intentit=newIntent(TelaInicial.this,NoticiaInternaImagens.class);Bundleparametros=newBundle();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 internetToast.makeText(TelaInicial.this,"Não há conexão.",Toast.LENGTH_LONG).show();}}}//FIM CLASSE ASYNCTASK}
T
toshikurauchi
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: