Qual seria a substituição para esse código?
Qual seria a substituição para esse código?
Fala Thiago! De boa ?
Cara fiz uns testes aqui na mesma versão que tu e consegui pegar de boa! Será que tá faltando você fazer o import dele ?
Boa tarde Matheus, tudo bem?
Dei import no ArrayAdapter, mas não encontrei a forma de utilizar o ArrayAdapter na documentação do Android. (https://developer.android.com/reference/android/widget/ArrayAdapter#remove(T))
Acredito que meu problema agora é entender como utilizar.
import android.widget.ArrayAdapter;
private void configuraLista() {
ListView listaDeAlunos = findViewById(R.id.activity_lista_alunos_listview);
final List<Aluno> alunos = dao.todos();
configuraAdapter(listaDeAlunos, alunos);
confinguraListenerDeCliquePorItem(listaDeAlunos);
listaDeAlunos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int posicao, long id) {
Aluno alunoEscolhido = (Aluno) adapterView.getItemAtPosition(posicao);
dao.remove(alunoEscolhido);
//Código com erro aqui
ArrayAdapter<alunoEscolhido>.remove;
return false;
}
});
}
Fala Thiago, de boa ?
Acho que tu tá confundindo um pouco os conceitos, mas acho que posso ajudar :)
Manda pra gente o código inteiro dessa classe, assim vamos entender certinho como está e como vai ser o melhor jeito de arrumar isso.
Fala Matheus, segue:
package alura.com.br.ui.activity;
import static alura.com.br.ui.activity.ConstantesActivities.CHAVE_ALUNO;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.List;
import alura.com.br.R;
import alura.com.br.dao.AlunoDAO;
import alura.com.br.ui.activity.model.Aluno;
public class ListaAlunosActivity extends AppCompatActivity {
public static final String TITULO_APPBAR = "Lista de Alunos";
private final AlunoDAO dao = new AlunoDAO();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Toast.makeText(this, "Eframetec bottom message", Toast.LENGTH_LONG).show();
// TextView aluno= new TextView(this);
// aluno.setText("Eframetec");
setContentView(R.layout.activity_lista_alunos);
setTitle(TITULO_APPBAR);
configuraFabNovoAluno();
}
private void configuraFabNovoAluno() {
FloatingActionButton botaoNovoAluno = findViewById(R.id.activity_lista_alunos_fab_novo_aluno);
botaoNovoAluno.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
abreFormularioModoInsereAluno();
finish();
}
});
}
private void abreFormularioModoInsereAluno() {
startActivity(new Intent(this,
FormularioAlunoActivity.class));
}
@Override
protected void onResume() {
super.onResume();
configuraLista();
}
private void configuraLista() {
ListView listaDeAlunos = findViewById(R.id.activity_lista_alunos_listview);
final List<Aluno> alunos = dao.todos();
configuraAdapter(listaDeAlunos, alunos);
confinguraListenerDeCliquePorItem(listaDeAlunos);
listaDeAlunos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int posicao, long id) {
Aluno alunoEscolhido = (Aluno) adapterView.getItemAtPosition(posicao);
dao.remove(alunoEscolhido);
//ArrayAdapter<alunoEscolhido>.remove;
return false;
}
});
}
private void confinguraListenerDeCliquePorItem(ListView listaDeAlunos) {
listaDeAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,
View view,
int posicao,
long id) {
Aluno alunoEscolhido = (Aluno) adapterView.getItemAtPosition(posicao);
abreFormularioModEditaAluno(alunoEscolhido);
}
});
}
private void abreFormularioModEditaAluno(Aluno aluno) {
Intent vaiParaFormularioActivity = new Intent(ListaAlunosActivity.this,
FormularioAlunoActivity.class);
vaiParaFormularioActivity.putExtra(CHAVE_ALUNO, aluno);
startActivity(vaiParaFormularioActivity);
}
private void configuraAdapter(ListView listaDeAlunos, List<Aluno> alunos) {
listaDeAlunos.setAdapter(new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1,
alunos));
}
}
Solucionado.
Eu não estava criando o método private do ArrayAdapter.
Comentado com "CORREÇÃO AQUI"
package alura.com.br.ui.activity;
import static alura.com.br.ui.activity.ConstantesActivities.CHAVE_ALUNO;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.List;
import alura.com.br.R;
import alura.com.br.dao.AlunoDAO;
import alura.com.br.ui.activity.model.Aluno;
public class ListaAlunosActivity extends AppCompatActivity {
public static final String TITULO_APPBAR = "Lista de Alunos";
private final AlunoDAO dao = new AlunoDAO();
//CORREÇÃO AQUI ABAIXO
private ArrayAdapter<Aluno> adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Toast.makeText(this, "Eframetec bottom message", Toast.LENGTH_LONG).show();
// TextView aluno= new TextView(this);
// aluno.setText("Eframetec");
setContentView(R.layout.activity_lista_alunos);
setTitle(TITULO_APPBAR);
configuraFabNovoAluno();
configuraLista();
}
private void configuraFabNovoAluno() {
FloatingActionButton botaoNovoAluno = findViewById(R.id.activity_lista_alunos_fab_novo_aluno);
botaoNovoAluno.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
abreFormularioModoInsereAluno();
finish();
}
});
}
private void abreFormularioModoInsereAluno() {
startActivity(new Intent(this,
FormularioAlunoActivity.class));
}
@Override
protected void onResume() {
super.onResume();
adapter.addAll(dao.todos());
}
private void configuraLista() {
ListView listaDeAlunos = findViewById(R.id.activity_lista_alunos_listview);
final List<Aluno> alunos = dao.todos();
configuraAdapter(listaDeAlunos, alunos);
confinguraListenerDeCliquePorItem(listaDeAlunos);
listaDeAlunos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int posicao, long id) {
Aluno alunoEscolhido = (Aluno) adapterView.getItemAtPosition(posicao);
dao.remove(alunoEscolhido);
adapter.remove(alunoEscolhido);
return false;
}
});
}
private void confinguraListenerDeCliquePorItem(ListView listaDeAlunos) {
listaDeAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,
View view,
int posicao,
long id) {
Aluno alunoEscolhido = (Aluno) adapterView.getItemAtPosition(posicao);
abreFormularioModEditaAluno(alunoEscolhido);
}
});
}
private void abreFormularioModEditaAluno(Aluno aluno) {
Intent vaiParaFormularioActivity = new Intent(ListaAlunosActivity.this,
FormularioAlunoActivity.class);
vaiParaFormularioActivity.putExtra(CHAVE_ALUNO, aluno);
startActivity(vaiParaFormularioActivity);
}
private void configuraAdapter(ListView listaDeAlunos, List<Aluno> alunos) {
adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1,
alunos);
listaDeAlunos.setAdapter(this.adapter);
}
}
Obrigado pela ajuda novamente Matheus!
Primeiro você precisa criar um atributo na sua classe, pra representar o adapter:
public class ListaAlunosActivity extends AppCompatActivity {
public static final String TITULO_APPBAR = "Lista de Alunos";
private final AlunoDAO dao = new AlunoDAO();
private ArrayAdapter<Aluno> adapter;
Em seguida vai precisar alterar o código da configuração do adapter:
private void configuraAdapter(ListView listaDeAlunos, List<Aluno> alunos) {
this.adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1,
alunos);
listaDeAlunos.setAdapter(adapter);
}
E ai vai poder usar o método remove
do adapter:
private void configuraLista() {
ListView listaDeAlunos = findViewById(R.id.activity_lista_alunos_listview);
final List<Aluno> alunos = dao.todos();
configuraAdapter(listaDeAlunos, alunos);
confinguraListenerDeCliquePorItem(listaDeAlunos);
listaDeAlunos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int posicao, long id) {
Aluno alunoEscolhido = (Aluno) adapterView.getItemAtPosition(posicao);
dao.remove(alunoEscolhido);
adapter.remove(alunoEscolhido);
return false;
}
});
}