title: what am I missing with `notifyDataSetChanged`?
body: <p>I have an activity that draws some icons on the view.</p>
  
  <p>It sets a list and listAdapter in <code>onCreate()</code>.</p>
  
  <p>I have extracted to public method the code that assign the list to my adapter.</p>
  
  <p>So that external code, can call the UI thread and assign new list to the adapter and make it notify the change via <code>notifyDataSetChange()</code></p>
  
  <p>However the new icons are not drawn, but only after leaving and getting back to the Activity.</p>
  
  <p>How can I fix this?</p>
  
  <p>I have tried adapter.clear()</p>
  
  <p>and doubled checked the UI thread runs this code.</p>
  
  <p>what else?</p>
  
  <pre><code>public class CategoriesActivity extends ActivityBase {
      private Category[] categories;
  
      SettingValueAdapter adapter;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.settings_values);
          ((TitleBar)findViewById(R.id.theTitleBar)).init(this,DisplayStrings.DS_CATEGORIES);
  
          adapter = new SettingValueAdapter(this);
  
          DriveToNativeManager nativeManager = DriveToNativeManager.getInstance();
          nativeManager.getCategories(new CategoriesListener() {
  
              @Override
              public void onComplete(Category[] aCategories) {
                  categories = aCategories;
                  refreshListIcons();
              }
          });
          final ListView list = (ListView)findViewById(R.id.settingsValueList);
          list.setAdapter(adapter);
          list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              ..
          });
      }
  
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          ..
      }
  
      public void refreshListIcons()  {
          NativeManager nativeManager = AppService.getNativeManager();
          SettingsValue[] values = new SettingsValue[categories.length];
          for (int i = 0; i &lt; categories.length; i++) {
              values[i] = new SettingsValue(categories[i].value, nativeManager.getLanguageString(categories[i].displayString), false);
              values[i].icon = ResManager.GetSkinDrawable(categories[i].iconName + ".bin");
          }
          adapter.setValues(values);
      }   
  }
  
  
  
  
  public class SettingValueAdapter extends BaseAdapter {
  
      private SettingsValue[] values;
      private LayoutInflater inflater;
      public SettingValueAdapter(Context context) {
          inflater = LayoutInflater.from(context);
      }
  
  ...
  
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          if (convertView == null) {
              convertView = inflater.inflate(R.layout.settings_item, null);
          }
          SettingsValue item = values[position];
          CheckedTextView name = (CheckedTextView) convertView.findViewById(R.id.itemText);
          ImageView iconView = (ImageView) convertView.findViewById(R.id.itemIcon);
          if (iconView != null &amp;&amp; (item != null) &amp;&amp; (item.icon != null)) {
              iconView.setImageDrawable(item.icon);
              iconView.setVisibility(View.VISIBLE);
          } else {
              iconView.setVisibility(View.GONE);
          }
          name.setText(item.display);
          name.setChecked(item.isSelected);
          View container = convertView.findViewById(R.id.itemContainer);
          if (position == 0) {
              ..
          return convertView;
      }
      public void setValues(SettingsValue[] values) {
          this.values = values;
          notifyDataSetChanged();
      }
  
  }
  </code></pre>