Boa noite.
Estou implementando um ListView em que, no ArrayAdapterCustomizado eu mudo a cor de um item (quando ele é nulo). O problema é que, quando eu rolo o ListView, outros itens que não tem nada a ver com o que eu mudei a cor, acaba sendo mudado a cor deles tbm.
Alguém sabe como resolve um problema desses? Abaixo segue o código:
NO ITEM:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cor_cinza_claro">
<TextView
android:id="@+id/turma"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="textEnd"
android:textColor="@color/cor_verde"
android:textSize="18sp"
android:textStyle="bold|italic"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/turno"
android:layout_width="0dp"
android:layout_height="20dp"
android:textAlignment="textEnd"
android:textColor="@color/cor_lilas"
android:textSize="14sp"
android:textStyle="bold|italic"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/turma"
app:layout_constraintTop_toBottomOf="@+id/turma" />
<TextView
android:id="@+id/horario"
android:layout_width="0dp"
android:layout_height="20dp"
android:textAlignment="textEnd"
android:textColor="@color/cor_azul"
android:textSize="12sp"
android:textStyle="bold|italic"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/turno"
app:layout_constraintTop_toBottomOf="@+id/turno" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
NO ARRAYADAPTERCUSTOMIZADO:
@Override
public View getView(final int position, View view, ViewGroup parent){
if(view == null){
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.item_turma, null);
}
turma = arrayList.get(position);// turma do arrayList segundo essa posição
banco = new BancoDeDados(context);
horario = banco.consultarHorarioPeloIdBanco(turma.getFkHorario());
TextView tvTurma = view.findViewById(R.id.turma);// Pega o view TextView "turma" pelo seu id, que está no layout inflado pela "view" e atribui ao TextView tvNome
TextView tvHorario = view.findViewById(R.id.horario);// Pega o view TextView "horario" pelo seu id, que está no layout inflado pela "view" e atribui ao TextView tvHorario
TextView tvTurno = view.findViewById(R.id.turno);// Pega o view TextView "turno" pelo seu id, que está no layout inflado pela "view" e atribui ao TextView tvTurno
if(horario == null){
tvTurma.setText(turma.getTurma());// Seta o Textview tvTurma passando o parâmetro turma.getTurma() que é o nome da turma da referente posição (position)
tvHorario.setText(R.string.associe_ao_horario);// Seta o Textview tvHorario passando a String R.string.associe_ao_horario
tvHorario.setTextColor(context.getColor(R.color.cor_vermelha));// Quando o horario é null, ele muda o tvTurno para esta cor personalizada
tvTurno.setText(R.string.associe_ao_turno);// Seta o Textview tvHorario passando a String R.string.associe_ao_turno
tvTurno.setTextColor(context.getColor(R.color.cor_vermelha));// Quando o turno é null, ele muda o tvTurno para esta cor personalizada
}
else if(horario != null){
turno = banco.consultarTurnoPeloIdBanco(horario.getFkTurno());
if(turno == null){
tvTurma.setText(turma.getTurma());// Seta o Textview tvTurma passando o parâmetro turma.getTurma() que é o nome da turma da referente posição (position)
tvHorario.setText(horario.getHoraInicial() + " às " + horario.getHoraFinal());// Seta o Textview tvHoraInicial passando o parâmetro a concatenação horario.getHoraInicial()+" às "+horario.getHoraFinal()
tvTurno.setText(R.string.associe_ao_turno);// Seta o Textview tvHorario passando a String R.string.associe_ao_turno
tvTurno.setTextColor(context.getColor(R.color.cor_vermelha));// Quando o turno é null, ele muda o tvTurno para esta cor personalizada
}
else{
tvTurma.setText(turma.getTurma());// Seta o Textview tvTurma passando o parâmetro turma.getTurma() que é o nome da turma da referente posição (position)
tvHorario.setText(horario.getHoraInicial() + " às " + horario.getHoraFinal());// Seta o Textview tvHoraInicial passando o parâmetro a concatenação horario.getHoraInicial()+" às "+horario.getHoraFinal()
tvTurno.setText(turno.getNomeTurno());// Seta o Textview tvTurno passando o parâmetro turno.getNomeTurno() que é o nome do turno da referente posição (position)
}
}
else{
turno = banco.consultarTurnoPeloIdBanco(horario.getFkTurno());
tvTurma.setText(turma.getTurma());// Seta o Textview tvTurma passando o parâmetro turma.getTurma() que é o nome da turma da referente posição (position)
tvHorario.setText(horario.getHoraInicial() + " às " + horario.getHoraFinal());// Seta o Textview tvHoraInicial passando o parâmetro a concatenação horario.getHoraInicial()+" às "+horario.getHoraFinal()
tvTurno.setText(turno.getNomeTurno());// Seta o Textview tvTurno passando o parâmetro turno.getNomeTurno() que é o nome do turno da referente posição (position)
}
return view;
}
NO LSITVIEW:
public void listarTurma(){
Cursor resultado = banco.listarTurmasBanco();// Retorna todos as turmas que estão no Banco de Dados
if(resultado.getCount() == 0){
Toast.makeText(this, R.string.lista_vazia, Toast.LENGTH_SHORT).show();
finish();
}
else{
while(resultado.moveToNext()){
String idTurma = resultado.getString(resultado.getColumnIndex("ID_TURMA"));
String nomeTurma = resultado.getString(resultado.getColumnIndex("NOME_TURMA"));
int limiteTurma = resultado.getInt(resultado.getColumnIndex("LIMITE_ALUNOS"));
String idHorario = resultado.getString(resultado.getColumnIndex("FK_HOR_TURMA"));
turma = new Turma(idTurma, nomeTurma, limiteTurma, idHorario);// Instância da turma
arrayList.add(turma);// Inserção do aluno no arrayList de turmas
arrayAdapterCustTurma = new ArrayAdapterCustTurma(this, arrayList);// Instância do ArrayAdapter passando o contexto e o arrayList
// arrayAdapterCustTurma.notifyDataSetChanged();
listView.setAdapter(arrayAdapterCustTurma);// O listView é setado passando como parâmetro o arrayAdapterCustTurma
qnt = arrayAdapterCustTurma.getCount();// Quantidade de Turma na Lista
tvQntTurma.setText(qnt + " Turmas");// tvQntTurma setado para exibir a quantidade de turmas
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, final View view, final int posicao, long id){
turma = arrayAdapterCustTurma.getItem(posicao);// Turma Clicada na Lista
AlertDialog.Builder box = new AlertDialog.Builder(ListarRamoverTurmas.this);// Instância da caixa de diálogo BOX do tipo AlertDialog.Builder
box.setIcon(R.drawable.icone_ok);
box.setTitle(R.string.turma);
box.setMessage(turma.imprimeDadosTurma(ListarRamoverTurmas.this));// Exibe os dados do turma pelo método imprimeDadosTurma(contexto) na mensagem do box
box.setPositiveButton(R.string.remover, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int which){
AlertDialog.Builder box = new AlertDialog.Builder(ListarRamoverTurmas.this);// Instância da caixa de diálogo BOX do tipo AlertDialog.Builder
box.setMessage(R.string.confirmar_exclusao);
box.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
if(banco.removerTurmaBanco(turma.getIdTurma()+"")){/**<MÉTODO QUE REMOVE A TURMA DO BANDO DE DADOS E RETORNA UM VALOR BOOLEAN**/
arrayList.remove(posicao);// Remove a turma do arrayList para não ser exibido no listview quando ele for removido do Bando de Dados
arrayAdapterCustTurma.notifyDataSetChanged();// ATUALIZA O LISTVIEW QUANDO UM ITEM É REMOVIDO (SÓ O .remove(position) NÃO ESTAVA FUNCIONANDO PERFEITAMENTE)
qnt = arrayAdapterCustTurma.getCount();// Quantidade de Turma na Lista
if(qnt == 0){
finish();// Se a quantidade de turmas for zero, a activity é fechada
}
else{
tvQntTurma.setText(qnt + " Turmas");// Se a quantidade de turmas for diferente zero, esse valor é exibido na activity
}
Toast.makeText(ListarRamoverTurmas.this, R.string.turma_removida_sucesso, Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(ListarRamoverTurmas.this, R.string.turma_nao_removida, Toast.LENGTH_SHORT).show();
}
}
});
box.setNegativeButton(R.string.cancelar, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(getApplicationContext(), InterfaceTurma.class);// Intent que volta para a Activity InterfaceTurma
startActivity(intent);
Toast.makeText(ListarRamoverTurmas.this, R.string.turma_removida_sucesso, Toast.LENGTH_SHORT).show();
}
});
box.show();
}
});
box.setNegativeButton(R.string.voltar_menu, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(getApplicationContext(), InterfaceTurma.class);// Intent que volta para a Activity InterfaceTurma
startActivity(intent);
finish();
}
});
box.show();
}
});
}
}
}
OS setText() FUNCIONAL, MAS setTextColor() NÃO. ELE TEM ESSE COMPORTAMENTO QUE FALEI.
DESDE JÁ, MT OBRIGADA A TODOS!