how to populate a listview asynchronously?

后端 未结 6 960
说谎
说谎 2020-12-29 07:03

I am wondering how I should implement a ListAdapter that loads its views asynchronously into a ListView? I want to do this because I am populating

6条回答
  •  余生分开走
    2020-12-29 07:35

    The best approach I've seen so far is from CommonsWare. It was found in this related answer.

    public class AsyncDemo extends ListActivity {
      private static final String[] items={"lorem", "ipsum", "dolor",
                                          "sit", "amet", "consectetuer",
                                          "adipiscing", "elit", "morbi",
                                          "vel", "ligula", "vitae",
                                          "arcu", "aliquet", "mollis",
                                          "etiam", "vel", "erat",
                                          "placerat", "ante",
                                          "porttitor", "sodales",
                                          "pellentesque", "augue",
                                          "purus"};
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        setListAdapter(new ArrayAdapter(this,
                            android.R.layout.simple_list_item_1,
                            new ArrayList()));
    
        new AddStringTask().execute();
      }
    
      class AddStringTask extends AsyncTask {
        @Override
        protected Void doInBackground(Void... unused) {
          for (String item : items) {
            publishProgress(item);
            SystemClock.sleep(200);
          }
    
          return(null);
        }
    
        @Override
        protected void onProgressUpdate(String... item) {
          ((ArrayAdapter)getListAdapter()).add(item[0]);
        }
    
        @Override
        protected void onPostExecute(Void unused) {
          Toast
            .makeText(AsyncDemo.this, "Done!", Toast.LENGTH_SHORT)
            .show();
        }
      }
    }
    

提交回复
热议问题