Ich habe eine ListView
mit einer CustomAdapter
und ich kann die Farbe der angeklickten Zeile ändern. Aber ich muss die Farbe ändern, wenn der Benutzer nach der Antwort (es ist eine Quiz-App), und ich habe versucht, eine öffentliche Methode, um es von meinem MainActivity
aufrufen, aber ich habe einen Fehler.Wie ändert man bestimmte Zeile/Zeile Farbe in ListView Android?
MyCustomAdapter Code:
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
// TODO Auto-generated method stub
final Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.row_item, null);
lista = parent;
holder.tv=(io.github.kexanie.library.MathView) rowView.findViewById(R.id.texto);
holder.row=(RelativeLayout) rowView.findViewById(R.id.row);
holder.img=(ImageView) rowView.findViewById(R.id.imagem);
holder.tv.setText(result[position]);
holder.img.setImageResource(imageId[position]);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
holder.tv.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
holder.tv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
holder.tv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
holder.tv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Paint the clicked line, and remove color from the unclicked lines.
for (int j = 0; j < 5; j++) {
parent.getChildAt(j).setBackgroundResource(R.color.branco);
if (j != position) {
status[j] = false;
}
}
if(!status[position]) {
holder.row.setBackgroundResource(R.color.azul);
status[position] = true;
respostas = ((MyApplication) simulado.getApplication()).getRespostas();
mudarAlternativa(position);
}else{
holder.row.setBackgroundResource(R.color.branco);
status[position] = false;
mudarAlternativa(5);
}
}
});
return rowView;
}
eine Linie zu malen, habe ich parent.getChildAt(position).setBackgroundResource(R.color.mycolor);
und es funktioniert, aber ich will es malen, ein Verfahren unter Verwendung von:
public void paintAnswer(int answerPosition){
parent.getChildAt(j).setBackgroundResource(R.color.green);
}
aber ich kann nicht parent
verwenden Also initialisierte ich ViewGroup lista;
und setzte lista
auf getView
. lista = parent
. Also hat ich versucht:
öffentliche Methode auf Adapter:
public void paintAnswer(int answerPosition){
lista.getChildAt(j).setBackgroundResource(R.color.green);
}
Aufruf von meinem MainActivity:
adapter.paintAnswer(2);
und ich habe ein erro. "verursacht durch: java.lang.NullPointerException: Versuch, die virtuelle Methode aufzurufen" android.view.View android.view.ViewGroup.getChildAt (int) 'für eine Null-Objektreferenz ".
Wie kann ich parent
außerhalb getView
verweisen, um die Linien mit einer öffentlichen Methode zu malen?
Danke. Ich bin freundlich in diesem Bereich, können Sie mir ein kleines Beispiel zeigen, einen Link, eine ähnliche Frage, etc? –
Ich habe über was Sie gesagt, und ich ändere die ListView To Five LinearLayout und es ist viel einfacher zu manipulieren. –
@GLAPPsMobile, wenn Sie eine feste Anzahl von Ansichten haben, ist es sinnvoll, vordefinierte Ansichten statt "ListView" zu verwenden. –