Ich zeige eine ListView mit einem BaseAdapter und dem ViewHolder-Muster.Falsche Ansicht von GetView im List-Adapter
public class ListViewActivity extends AppCompatActivity {
private String[] letters = {"A", "B", "C", "D",
"E", "F", "G", "H", "I", "J", "K", "L",
"M", "N", "O","P", "Q"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_lv);
final ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new TestBaseAdapter(this, letters));
}
class TestBaseAdapter extends BaseAdapter {
private Context context;
private String[] values;
private LayoutInflater inflater;
public TestBaseAdapter(Context context, String[] values) {
this.context = context;
this.values = values;
this.inflater = LayoutInflater.from(this.context);
}
@Override
public int getCount() {
return values.length;
}
@Override
public Object getItem(int position) {
return values[position];
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder myViewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.lv_layout, parent, false);
myViewHolder = new MyViewHolder(convertView);
convertView.setTag(myViewHolder);
} else {
myViewHolder = (MyViewHolder) convertView.getTag();
}
myViewHolder.title.setText((String)getItem(position));
if (((String)getItem(position)).equals("A")) {
myViewHolder.icon.setImageResource(R.drawable.custom_icon);
}
return convertView;
}
private class MyViewHolder {
TextView title;
ImageView icon;
public MyViewHolder(View item) {
title = (TextView) item.findViewById(R.id.label);
icon = (ImageView) item.findViewById(R.id.logo);
}
}
}
}
Der Code zeigt nur den Inhalt des Feldes in der Listenansicht, wobei jede Reihe ein Element aus dem Array enthält, aber wenn der Elementwert „A“ ist, zeigt die Zeile zeigt ein anderes Symbol. Diese Bedingung in diesem Teil der gemacht wird getView (...) Methode:
...
if (((String)getItem(position)).equals("A")) {
myViewHolder.icon.setImageResource(R.drawable.custom_icon);
}
...
Wenn die Aktivität erstellt wird, scheint alles in Ordnung zu sein:
aber wenn ich scrollen Listenansicht nach unten, wird das Symbol für den A Brief anders
A. zufällig über Briefe gezeigt
Was mache ich falsch?