Tôi đang gặp nhiều sự cố khi làm mới chế độ xem danh sách bằng bộ điều hợp tùy chỉnh. Tôi đã tìm kiếm trực tuyến trong một giờ qua và tôi dường như không thể tìm thấy bất kỳ giải pháp nào giúp làm mới chế độ xem danh sách của tôi.Bộ điều hợp Android ListView sẽ không làm mới
Tôi đã thử notifyDataSetChanged và cũng listView.invalidate, nhưng dường như không có gì hoạt động. Mọi sự trợ giúp sẽ rất được trân trọng. Tôi có thể thấy dữ liệu đang được cập nhật bằng cách sử dụng logcat, nhưng nó không được làm mới trên màn hình và tôi không biết tại sao.
Dưới đây là mã.
ArrayList<Student> students = new ArrayList<Student>();
listview = (ListView) findViewById(R.id.listView);
adapter = new StudentAdapter(this, R.layout.listitemlayout, students);
listview.setAdapter(adapter);
Tuỳ chỉnh Adaptor
public class StudentAdapter extends ArrayAdapter<Student>{
Context context;
int layoutResourceId;
ArrayList<Student> data = null;
public StudentAdapter(Context context, int layoutResourceId, ArrayList<Student> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
public void updateStudentsList(ArrayList<Student> newlist){
data.clear();
data = newlist;
this.notifyDataSetChanged();
}
public void updateStudentTime(){
for (Student s : data) {
s.updateElapsedTime();
}
this.notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null){
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
Student student = data.get(position);
TextView title = (TextView)row.findViewById(R.id.txtTitle);
title.setText(student.getFirstname() + " " + student.getLastname());
TextView subTitle = (TextView)row.findViewById(R.id.txtSubTitle);
subTitle.setText(student.getStudentID());
TextView duration = (TextView)row.findViewById(R.id.textDuration);
duration.setText(student.getElapsedTime());
}
return row;
}
}
tôi cập nhật dữ liệu sử dụng một sợi tất cả vì vậy thường xuyên.
Runnable runnable = new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
// Updates how long the student is in the centre.
adapter.updateStudentTime();
adapter.notifyDataSetChanged();
listview.invalidate();
Log.i("Debug", "Running on UI Thread");
}
});
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(runnable, 1000);
cập nhật ui ui trên thread. gọi adapter.updateStudentTime(); sử dụng runonuithread – Raghunandan