Eu estou implementando um Android
aplicação com um Navigation Drawer
e eu tenho um problema com isso.
Eu comecei a partir do modelo (app Android comgaveta de navegação) no estúdio Android e adicionou uma nova seção a ele - Configurações. Ao clicar no botão de configurações, o usuário é levado para uma nova atividade e o usuário pode voltar ou pressionando o botão "para cima" na barra de ação (que funciona perfeitamente) ou pressionando o botão físico de volta. Essa parte não funciona tão bem.
Ao pressionar o botão "para cima" e depois abrira barra de navegação, minha home page é destacada (selecionada). Mas ao usar o botão Voltar e abrir a gaveta de navegação, o item Configurações é selecionado, como se o usuário estivesse visualizando essa página e não a página inicial.
Então, isso acontece porque o fragmento da gaveta de navegaçãoNão é atualizado e não encontrei nenhuma maneira de resolver este problema. O que eu gostaria é que a gaveta de navegação seja recriada (o que eu acho que acontece quando pressiono o botão "para cima"). Você sabe como eu posso fazer isso? isso acontece?
Comecei a trabalhar em uma solução baseada nisso:
getSupportFragmentManager().addOnBackStackChangedListener(
new FragmentManager.OnBackStackChangedListener() {
public void onBackStackChanged() {
// Update your UI here.
}
});
Mas eu não sei o que escrever lá que irá atualizar toda a interface do usuário (experimentei chamar onCreate (), mas é muito feio e não pode ser o caminho certo).
Alguma sugestão?
ATUALIZAR:
O evento onBackStackChanged não é enviado ao pressionar BACK de outra atividade. Apenas para fragmentos na atividade atual.
Respostas:
0 para resposta № 1Você tem que substituir o botão de ação de volta como este:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
//or
super.onBackPressed();
break;
}
return true;
}
0 para resposta № 2
Eu tive o mesmo problema.Eu usei notifyDataSetChanged () no ListView Adapter.
Em getView () eu usei,
if(mListView.isItemChecked(position)) {
convertView.setBackgroundColor(getResources().getColor(R.color.md_black_1000_12));
}else{
convertView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
}
notifyDataSetChanged();