package com.novoda.espressoemptyviewlistview; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import static android.os.SystemClock.sleep; public class MainActivity extends Activity { private static final int LONG_TASK_DURATION_MS = 3000; private static final int SET_NEW_ADAPTER = 1; private static final int NOTIFY_DATA_SET_CHANGED_ADAPTER = 2; private GridView gridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setupGridView(); loadData(); } private void setupGridView() { gridView = (GridView) findViewById(R.id.grid); gridView.setAdapter(new EmptyAdapter()); View emptyView = findViewById(R.id.empty_view); gridView.setEmptyView(emptyView); } private void loadData() { new AsyncTask<Void, Integer, Void>() { @Override protected Void doInBackground(Void... params) { sleep(LONG_TASK_DURATION_MS); publishProgress(SET_NEW_ADAPTER); sleep(LONG_TASK_DURATION_MS); publishProgress(NOTIFY_DATA_SET_CHANGED_ADAPTER); sleep(LONG_TASK_DURATION_MS); return null; } @Override protected void onProgressUpdate(Integer... values) { final Integer action = values[0]; switch (action) { case SET_NEW_ADAPTER: gridView.setAdapter(new LoremAdapter()); break; case NOTIFY_DATA_SET_CHANGED_ADAPTER: ((BaseAdapter) gridView.getAdapter()).notifyDataSetChanged(); break; } } @Override protected void onPostExecute(Void aVoid) { LoremAdapter loremAdapter = new LoremAdapter(); gridView.setAdapter(loremAdapter); loremAdapter.setLoading(false); } }.execute(); } private static final class EmptyAdapter extends BaseAdapter { @Override public int getCount() { return 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { return null; } } }