How to reset the ListView with the ArrayAdapter after fetching data

GeekedOut picture GeekedOut · Mar 10, 2012 · Viewed 27.9k times · Source

I am using an ListAdapter to populate a ListView like this:

static final String[] PROBLEMS = new String[] {"one", "two", "three" };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);        

    setListAdapter(new ArrayAdapter<String>(this, R.layout.my_problems, PROBLEMS));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

and after that I am making a remote call to my server to get more data for that list with an AsyncTask call, and when I get the data back from the server I don't know how to populate and reset the ListView. So far I have something like this:

    @Override
    protected void onPostExecute(String result) 
    {       
            // Unwrap the stuff from the JSON string                
            String problem_title = null;
            String problem_id = null;

            try
            {
                JSONArray obj = new JSONArray(result);
                JSONObject o = obj.getJSONObject(0);                    

                Log.d( "Title: " , "" + o.getString("problem_title") );       
                Log.d( "id: " , "" + o.getString("problem_id") );      

                problem_title = o.getString("problem_title");
                problem_id = o.getString("problem_id");
            }
            catch ( Exception e )
            {
            }

            // Now not sure what to do :)
            // How do I reset the list that I had set up above?
                }

I can make the result into appropriately structured data to reset the list but not sure how that is done. Can someone please help? :)

Answer

Hesham Saeed picture Hesham Saeed · Mar 10, 2012

I use it this way,

    values = new ArrayList<String>();
    //put anything you want in values as start
    adapter = new ArrayAdapter<String>(this,R.layout.notification, values);
    setListAdapter(adapter);

then

    //change values array with your new data then update the adapter
    adapter.notifyDataSetChanged();

then the listview content will change at the time you execute this function