Last active
June 30, 2020 20:05
-
-
Save vinnom/7a70d44e1ec2b555f6f87e076b88895d to your computer and use it in GitHub Desktop.
Lista de alunos só carrega após ir para o Formulário e voltar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.agenda.ui.asynctask; | |
import android.os.AsyncTask; | |
import java.util.List; | |
import br.com.alura.agenda.model.Aluno; | |
import br.com.alura.agenda.room.AlunoDao; | |
public class AtualizaListaAsyncTask extends AsyncTask<Void, Void, List<Aluno>> { | |
private final List<Aluno> alunos; | |
private final AlunoDao alunoDao; | |
private final DepoisDaExecucao depoisDaExecucao; | |
public AtualizaListaAsyncTask(List<Aluno> alunos, AlunoDao alunoDao, DepoisDaExecucao depoisDaExecucao){ | |
this.alunos = alunos; | |
this.alunoDao = alunoDao; | |
this.depoisDaExecucao = depoisDaExecucao; | |
} | |
@Override | |
protected List<Aluno> doInBackground(Void... voids){ | |
List<Aluno> todosAlunos = alunoDao.listagem(); | |
return todosAlunos; | |
} | |
@Override | |
protected void onPostExecute(List<Aluno> todosAlunos){ | |
super.onPostExecute(alunos); | |
alunos.clear(); | |
alunos.addAll(todosAlunos); | |
depoisDaExecucao.executa(); | |
} | |
public interface DepoisDaExecucao{ | |
void executa(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.agenda.ui.asynctask; | |
import java.util.List; | |
import br.com.alura.agenda.model.Telefone; | |
public interface DefineTelefonesListener { | |
void defineNumerosTelefone(List<Telefone> telefones); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.agenda.ui.asynctask; | |
import android.os.AsyncTask; | |
import android.widget.TextView; | |
import br.com.alura.agenda.model.Telefone; | |
import br.com.alura.agenda.room.TelefoneDao; | |
public class DevolvePrimeiroTelefoneAsyncTask extends AsyncTask<Void, Void, Telefone> { | |
private final TelefoneDao telefoneDao; | |
private final int alunoId; | |
private final DevolvePrimeiroTelefone telefoneListener; | |
public DevolvePrimeiroTelefoneAsyncTask(TelefoneDao telefoneDao, int alunoId, DevolvePrimeiroTelefone telefoneListener){ | |
this.telefoneDao = telefoneDao; | |
this.telefoneListener = telefoneListener; | |
this.alunoId = alunoId; | |
} | |
@Override | |
protected Telefone doInBackground(Void... voids){ | |
Telefone primeiroTelefone = telefoneDao.devolvePrimeiroTelefone(alunoId); | |
if(primeiroTelefone != null){ | |
telefoneListener.devolveQuandoEncontrado(primeiroTelefone); | |
} | |
return primeiroTelefone; | |
} | |
@Override | |
protected void onPostExecute(Telefone telefone){ | |
super.onPostExecute(telefone); | |
} | |
public interface DevolvePrimeiroTelefone { | |
void devolveQuandoEncontrado(Telefone telefone); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.agenda.ui.adapter; | |
import android.content.Context; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.BaseAdapter; | |
import android.widget.TextView; | |
import java.util.ArrayList; | |
import java.util.List; | |
import br.com.alura.agenda.R; | |
import br.com.alura.agenda.model.Aluno; | |
import br.com.alura.agenda.room.AgendaBD; | |
import br.com.alura.agenda.room.AlunoDao; | |
import br.com.alura.agenda.room.TelefoneDao; | |
import br.com.alura.agenda.ui.asynctask.AtualizaListaAsyncTask; | |
import br.com.alura.agenda.ui.asynctask.DevolvePrimeiroTelefoneAsyncTask; | |
import br.com.alura.agenda.ui.asynctask.RemoveAlunoAsyncTask; | |
public class ListaAlunoAdapter extends BaseAdapter { | |
private final Context context; | |
private final TelefoneDao telefoneDao; | |
private final AlunoDao alunoDao; | |
private List<Aluno> alunos; | |
public ListaAlunoAdapter(Context context) { | |
this.context = context; | |
alunoDao = AgendaBD.getInstance(context).getRoomAlunoDao(); | |
telefoneDao = AgendaBD.getInstance(context).getTelefoneDao(); | |
alunos = new ArrayList<>(); | |
} | |
@Override | |
public int getCount() { | |
return alunos.size(); | |
} | |
@Override | |
public Aluno getItem(int posicao) { | |
return alunos.get(posicao); | |
} | |
@Override | |
public long getItemId(int posicao) { | |
return alunos.get(posicao).getId(); | |
} | |
@Override | |
public View getView(int posicao, View view, ViewGroup viewGroup) { | |
return defineAlunoItemView(posicao, viewGroup); | |
} | |
private View defineAlunoItemView(int posicao, ViewGroup viewGroup) { | |
Aluno aluno = alunos.get(posicao); | |
View alunoItemView = LayoutInflater.from(context).inflate(R.layout.item_aluno, viewGroup, false); | |
TextView campoNome = alunoItemView.findViewById(R.id.item_aluno_nome); | |
campoNome.setText(aluno.getNome()); | |
TextView campoTelefone = alunoItemView.findViewById(R.id.item_aluno_telefone); | |
new DevolvePrimeiroTelefoneAsyncTask(telefoneDao, aluno.getId(), telefone -> { | |
campoTelefone.setText(telefone.getNumero()); | |
}).execute(); | |
return alunoItemView; | |
} | |
public void atualizaAdapter() { | |
new AtualizaListaAsyncTask(alunos, alunoDao, this::notifyDataSetChanged).execute(); | |
} | |
public void remove(Aluno aluno) { | |
new RemoveAlunoAsyncTask(aluno, alunos, alunoDao).execute(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.agenda.ui.activity; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.view.ContextMenu; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.widget.ListView; | |
import com.google.android.material.floatingactionbutton.FloatingActionButton; | |
import androidx.appcompat.app.AppCompatActivity; | |
import br.com.alura.agenda.R; | |
import br.com.alura.agenda.model.Aluno; | |
import br.com.alura.agenda.ui.activity.component.ListaAlunosActivityComponent; | |
public class ListaAlunosActivity extends AppCompatActivity{ | |
public static final String CHAVE_ALUNO = "aluno"; | |
private static final String TITULO_APPBAR = "Lista de Alunos"; | |
private Intent daListaProForm; | |
private ListaAlunosActivityComponent component; | |
@Override | |
protected void onCreate(Bundle savedInstanceState){ | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_lista_alunos); | |
setTitle(TITULO_APPBAR); | |
component = new ListaAlunosActivityComponent(this); | |
defineFabNovoAluno(); | |
} | |
@Override | |
protected void onResume(){ | |
super.onResume(); | |
listaAlunos(); | |
component.atualizaLista(); | |
daListaProForm = geraIntentProForm(); | |
} | |
private void defineFabNovoAluno(){ | |
FloatingActionButton novoAluno = findViewById(R.id.lista_alunos_fab); | |
abreFormularioNovoAluno(novoAluno); | |
} | |
private void listaAlunos(){ | |
ListView listView = findViewById(R.id.lista_alunos_listView); | |
component.defineListaAdapter(listView); | |
registerForContextMenu(listView); | |
abreFormularioEditaAluno(listView); | |
} | |
private Intent geraIntentProForm(){ | |
return new Intent(ListaAlunosActivity.this, FormularioAlunoActivity.class); | |
} | |
private void abreFormularioNovoAluno(FloatingActionButton novoAluno){ | |
novoAluno.setOnClickListener(view -> startActivity(daListaProForm)); | |
} | |
private void abreFormularioEditaAluno(ListView listView){ | |
listView.setOnItemClickListener((adapterView, view, posicao, id) -> { | |
Aluno aluno = (Aluno) adapterView.getItemAtPosition(posicao); | |
daListaProForm.putExtra(CHAVE_ALUNO, aluno); | |
startActivity(daListaProForm); | |
}); | |
} | |
@Override | |
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){ | |
super.onCreateContextMenu(menu, v, menuInfo); | |
getMenuInflater().inflate(R.menu.activity_lista_alunos_menu, menu); | |
} | |
@Override | |
public boolean onContextItemSelected(MenuItem item){ | |
component.defineMenuDeContextoRemover(item); | |
return super.onContextItemSelected(item); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.agenda.ui.activity.component; | |
import android.content.Context; | |
import android.view.MenuItem; | |
import android.widget.AdapterView; | |
import android.widget.ListView; | |
import androidx.appcompat.app.AlertDialog; | |
import br.com.alura.agenda.R; | |
import br.com.alura.agenda.model.Aluno; | |
import br.com.alura.agenda.room.AgendaBD; | |
import br.com.alura.agenda.room.AlunoDao; | |
import br.com.alura.agenda.ui.adapter.ListaAlunoAdapter; | |
public class ListaAlunosActivityComponent { | |
private static final String DIALOGO_REMOCAO = "Removendo aluno"; | |
private static final String CONFIRMA_REMOCAO = "Gostaria de remover o aluno?"; | |
private static final String SIM = "SIM"; | |
private static final String NAO = "NÃO"; | |
private ListaAlunoAdapter listaAdapter; | |
private Context context; | |
public ListaAlunosActivityComponent(Context context){ | |
this.context = context; | |
this.listaAdapter = new ListaAlunoAdapter(this.context); | |
} | |
public void defineMenuDeContextoRemover(MenuItem item){ | |
final AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); | |
int itemId = item.getItemId(); | |
if(itemId == R.id.activity_lista_alunos_menu_remover){ | |
geraDialogoRemocaoAluno(menuInfo); | |
} | |
} | |
private void geraDialogoRemocaoAluno(final AdapterView.AdapterContextMenuInfo menuInfo){ | |
new AlertDialog.Builder(context) | |
.setTitle(DIALOGO_REMOCAO) | |
.setMessage(CONFIRMA_REMOCAO) | |
.setPositiveButton(SIM, (dialogInterface, i) -> { | |
Aluno aluno = listaAdapter.getItem(menuInfo.position); | |
remove(aluno); | |
}) | |
.setNegativeButton(NAO, null) | |
.create() | |
.show(); | |
} | |
public void atualizaLista(){ | |
listaAdapter.atualizaAdapter(); | |
} | |
public void defineListaAdapter(ListView listView){ | |
listView.setAdapter(listaAdapter); | |
} | |
private void remove(Aluno aluno){ | |
listaAdapter.remove(aluno); | |
listaAdapter.notifyDataSetChanged(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment