0

How to change text of items in ListView when it is displayed using SimpleCursorAdaptor? Here is my code.

Cursor allTaskcursor = databaseHelper.getAllTasks();
String[] from = {"name", "date"};
int[] to = new int[] {android.R.id.text1, android.R.id.text2};
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(context, android.R.layout.simple_list_item_2, allTaskcursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
allTaskListView.setAdapter(cursorAdapter);

getAllTasks() returns a cursor where date is an Integer value (example 10) which is displayed in android.R.id.text2. I want to change that text (example "10 days").

Hemanth
  • 2,717
  • 2
  • 21
  • 29

2 Answers2

0

If you want to update single list item and you know the index of item, you can call getChildAt(int) on the ListView to get the view and update it like -

TextView text2 = (TextView) v.findViewById(R.id.text2);
text2.setText("Updated Text");

Or If, you want to update all values in array, you can update the array and call notifyDataSetChanged on adapter to reflect the updated values.

Kanak Sony
  • 1,570
  • 1
  • 21
  • 37
  • I want to change text in all ListView items. I am taking the data in ListView from database. Should I get the count of items in listView and run a _for loop_ to change text in every item? – Hemanth Apr 23 '14 at 19:07
  • No, just update the values in array.. and call notifyDataSetChanged on adapter. – Kanak Sony Apr 23 '14 at 19:08
0

SimpleCursorAdapter.ViewBinder did the job. As answered here, I changed the code to..

Cursor allTaskcursor = databaseHelper.getAllTasks();
    String[] from = {"name", "date"};
    int[] to = new int[] {android.R.id.text1, android.R.id.text2};
    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(context, android.R.layout.simple_list_item_2, allTaskcursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            if (view.getId() == android.R.id.text2) {
                int getIndex = cursor.getColumnIndex("date");
                int date = cursor.getInt(getIndex);
                TextView dateTextView = (TextView) view;
                dateTextView.setText(date + " days");
                return true;
            }
            return false;
        }
    });
    allTaskListView.setAdapter(cursorAdapter);
Community
  • 1
  • 1
Hemanth
  • 2,717
  • 2
  • 21
  • 29