Por favor, quem puder me ajudar. Ao tentar migrar o código de ListaContatosActivity.java para ListaContatosView.java o app crashou. Estou usando uma classe ViewHolder e foi nela o problema. Seu atributo listaDeContatos não ficou visível. Alguém puder dar uma luz. Obrigado!
public class ListaContatosActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TITLE_LISTA = "E aí!?";
private ViewHolder mViewHolder = new ViewHolder();
private final ContatoDAO dao = new ContatoDAO();
private ListaContatosAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista_contatos);
setTitle(TITLE_LISTA);
configuraFabNovoContato();
configuraLista();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.activity_lista_contatos_menu, menu);
}
@Override
public boolean onContextItemSelected(final MenuItem item) {
if (item.getItemId() == R.id.activity_lista_contatos_menu_remover) {
confirmaRemocao(item);
}
return super.onContextItemSelected(item);
}
private void confirmaRemocao(final MenuItem item) {
new AlertDialog
.Builder(this)
.setTitle("Excluindo Contato")
.setMessage("Tem certeza que deseja excluir o contato?")
.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
Contato contatoSelecionado = adapter.getItem(menuInfo.position);
remove(contatoSelecionado);
}
})
.setNegativeButton("Não", null)
.show();
}
private void configuraFabNovoContato() {
this.mViewHolder.buttonNovoContato = findViewById(R.id.activity_lista_alunos_fab);
this.mViewHolder.buttonNovoContato.setOnClickListener(this);
}
@Override
protected void onResume() {
super.onResume(); // É o que deve ser feito no onResume (recarregar) da página
atualizaContatos();
}
private void atualizaContatos() {
adapter.atualiza(dao.todos());
}
private void configuraLista() {
this.mViewHolder.listaDeContatos = findViewById(R.id.activity_lista_contatos_lvContatos);
final List<Contato> contatos = dao.todos();
configuraAdapter(contatos);
configuraListenerDeClickPorItem(contatos);
registerForContextMenu(this.mViewHolder.listaDeContatos);
}
private void remove(Contato contato) {
dao.remove(contato);
adapter.remove(contato);
}
private void configuraListenerDeClickPorItem(final List<Contato> contatos) {
this.mViewHolder.listaDeContatos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Contato contatoSelecionado = (Contato) adapterView.getItemAtPosition(position);
abreFormularioModoEditaContato(contatoSelecionado);
}
});
}
private void abreFormularioModoEditaContato(Contato contatoSelecionado) {
Intent vaiParaFormularioActivity = new Intent(ListaContatosActivity.this, FormularioContatoActivity.class);
vaiParaFormularioActivity.putExtra(CHAVE_CONTATO, contatoSelecionado);
startActivity(vaiParaFormularioActivity);
}
private void configuraAdapter(List<Contato> contatos) {
adapter = new ListaContatosAdapter(this);
this.mViewHolder.listaDeContatos.setAdapter(adapter);
}
@Override
public void onClick(View v) {
abreFormularioContatoActivity();
}
private void abreFormularioContatoActivity() {
startActivity(new Intent(this, FormularioContatoActivity.class));
}
private static class ViewHolder {
FloatingActionButton buttonNovoContato;
ListView listaDeContatos;
}
}