Я создал адаптер для ListView
в Android, который ведет себя действительно странно. Listview передается список объектов, который сортируется по некоторому правилу (сравнение чисел, wow ...). Теперь, когда список показан в представлении, отображаются повторяющиеся записи, они не сортируются, записи отсутствуют, а при прокрутке списка меняются даже записи! Что происходит?Почему мой список выглядит странно в андроиде?
Вот код адаптера, я могу разместить больше кода, если это необходимо:
public class StatViewAdapter extends BaseAdapter {
Activity activity;
ArrayList<Entry> entries;
TextView txtName;
TextView txtOK;
TextView txtNOK;
TextView txtHist;
TextView txtPrandom;
TextView txtPhist;
TextView txtPtotal;
//public StatViewAdapter(Activity activity, ArrayList<HashMap<String, String>> list){
public StatViewAdapter(Activity activity, ArrayList<Entry> entries){
super();
this.activity=activity;
this.entries = entries;
Collections.sort(this.entries, new Comparator<Entry>() {
@Override
public int compare(Entry o1, Entry o2) {
if (o1.getPriority() > o2.getPriority()) {
return 1;
}
if (o1.getPriority() < o2.getPriority()) {
return -1;
}
return 0;
}
});
for (int i=0;i<this.entries.size();i++) {
String name = this.entries.get(i).name();
int p = this.entries.get(i).getPriority();
System.out.println(String.format("%s: %d", name, p));
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
//return list.size();
return this.entries.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return this.entries.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater=this.activity.getLayoutInflater();
if(convertView == null){
convertView=inflater.inflate(R.layout.list_view, null);
txtName=(TextView) convertView.findViewById(R.id.listname);
txtOK=(TextView) convertView.findViewById(R.id.listok);
txtNOK=(TextView) convertView.findViewById(R.id.listnok);
txtHist=(TextView) convertView.findViewById(R.id.listhist);
txtPrandom =(TextView) convertView.findViewById(R.id.listprandom);
txtPhist=(TextView) convertView.findViewById(R.id.listphist);
txtPtotal=(TextView) convertView.findViewById(R.id.listptot);
}
Entry entry = this.entries.get(position);
txtName.setText(entry.name());
txtOK.setText(Integer.toString(entry.number_ok));
txtNOK.setText(Integer.toString(entry.number_nok));
txtHist.setText(entry.history);
txtPrandom.setText(Integer.toString(entry.randomIndex));
txtPhist.setText(Integer.toString(entry.histIndex));
txtPtotal.setText(Integer.toString(entry.getPriority()));
return convertView;
}
}
Очевидно, потому что вы храните ссылки на мнения пункта непосредственно в Adapter – Selvin
что? Вы можете объяснить? Это не очевидно для меня ... – Alex
Проанализируйте, что произойдет, если convertView не является нулевым, но не совпадает с последним представлением, полученным от getView. – Selvin