I am having trouble updating the list using the adapter. I searched online for the past hour, and I cannot find any solution that will force me to update the list.
I tried notifyDataSetChanged as well as listView.invalidate but nothing works. Any help would be greatly appreciated. I can see that the data is being updated using logcat, but it is not being updated on the screen, and I have no idea why.
Below is the code.
ArrayList<Student> students = new ArrayList<Student>(); listview = (ListView) findViewById(R.id.listView); adapter = new StudentAdapter(this, R.layout.listitemlayout, students); listview.setAdapter(adapter);
Custom adapter
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; } }
I update data using a stream so often.
Runnable runnable = new Runnable() { public void run() { runOnUiThread(new Runnable() { public void run() {
source share