title: ExpandableListView getChildAt() return null
body: <p>I want to add an image into some cells in ExpandableListI already search for answer on my question and I try to put </p>
  
  <pre><code>expListView.getLastVisiblePosition();
  expListView.getFirstVisiblePosition();
  </code></pre>
  
  <p>And it isn't work. I can't do this in getView() in adapter, because I create cells dynamically by downloading data from database, and after it I can say which cell need image.</p>
  
  <p>I also tried to do:
  <a href="https://stackoverflow.com/questions/10318862/sometimes-listview-getchildatint-index-returns-null-android">Sometimes listView.getChildAt(int index) returns NULL (Android)</a>
  <a href="https://stackoverflow.com/questions/17919872/nullpointerexception-on-getchildat">Nullpointerexception on getChildAt</a>
  <a href="https://stackoverflow.com/questions/15838422/gridview-getchildat-returns-null">GridView getChildAt() returns null</a>
  No solution work.
  It is my code:</p>
  
  <pre><code>public class ExpandableListAdapter extends BaseExpandableListAdapter {
      private Context _context;
      private List&lt;String&gt; _listDataHeader; // header titles
      // child data in format of header title, child title
      private HashMap&lt;String,String&gt; _listDataChild;
  
      public ExpandableListAdapter(Context context, List&lt;String&gt; listDataHeader,
                                   HashMap&lt;String, String&gt; listChildData) {
          this._context = context;
          this._listDataHeader = listDataHeader;
          this._listDataChild = listChildData;
      }
  
      @Override
      public Object getChild(int groupPosition, int childPosititon) {
          return this._listDataChild.get(this._listDataHeader.get(groupPosition));
      }
  
      @Override
      public long getChildId(int groupPosition, int childPosition) {
          return childPosition;
      }
  
      @Override
      public View getChildView(int groupPosition, final int childPosition,
                               boolean isLastChild, View convertView, ViewGroup parent) {
  
          final String childText = (String) getChild(groupPosition, childPosition);
  
          if (convertView == null) {
              LayoutInflater infalInflater = (LayoutInflater) this._context
                      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              convertView = infalInflater.inflate(R.layout.list_item, null);
          }
  
          TextView txtListChild = (TextView) convertView
                  .findViewById(R.id.lblListItem);
  
          txtListChild.setText(childText);
          return convertView;
      }
  
      @Override
      public int getChildrenCount(int groupPosition) {
          return 1;
      }
  
      @Override
      public Object getGroup(int groupPosition) {
          return this._listDataHeader.get(groupPosition);
      }
  
      @Override
      public int getGroupCount() {
          return this._listDataHeader.size();
      }
  
      @Override
      public long getGroupId(int groupPosition) {
          return groupPosition;
      }
  
      @Override
      public View getGroupView(int groupPosition, boolean isExpanded,
                               View convertView, ViewGroup parent) {
          String headerTitle = (String) getGroup(groupPosition);
          if (convertView == null) {
              LayoutInflater infalInflater = (LayoutInflater) this._context
                      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              convertView = infalInflater.inflate(R.layout.spinner, null);
          }
  
          TextView lblListHeader = (TextView) convertView
                  .findViewById(R.id.lblListHeader);
          lblListHeader.setTypeface(Controller.getInstance().getTypeface());
          lblListHeader.setText(headerTitle);
  
          //I can' do this in this place
          //ImageView iv = (ImageView)convertView.findViewById(R.id.exc);
          //iv.setImageResource(R.drawable.excl);
  
          return convertView;
      }
  
      @Override
      public boolean hasStableIds() {
          return false;
      }
  
      @Override
      public boolean isChildSelectable(int groupPosition, int childPosition) {
          return true;
      }
  }
  </code></pre>
  
  <p>And Activity:</p>
  
  <pre><code>public class ExpertZone extends Activity{
      String err;
      Context context;
      ExpandableListAdapter listAdapter;
      ExpandableListView expListView;
      List&lt;String&gt; listDataHeader;
      HashMap&lt;String, String&gt; listDataChild;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.expert_zone);
  
          context=this;
  
          // get the listview
          expListView = (ExpandableListView) findViewById(R.id.expListView);
  
          // preparing list data
          prepareListData();
  
      }
  
      /*
       * Preparing the list data
       */
      private void prepareListData() {
          listDataHeader = new ArrayList&lt;String&gt;();
          listDataChild = new HashMap&lt;String, String&gt;();
  
          DBexpertTask dbTask = new DBexpertTask(getString(R.string.expertServlet)) {
              @Override
              protected void onPostExecute(JSONObject obj) {
                  JSONArray jArray = new JSONArray();
                  try {
                      JSONArray jsonObject = obj.getJSONArray(getString(R.string.data));
                      for (int i = 0; i &lt; jsonObject.length(); i++) {
                          JSONObject object = jsonObject.getJSONObject(i);
                          err = object.getString(getString(R.string.err));
                          if(err.equals(getString(R.string.no))) {
                              jArray = object.getJSONArray(getString(R.string.data));
                              for (int j = 0; j &lt; jArray.length(); j++) {
                                  JSONObject values = jArray.getJSONObject(j);
                                  listDataHeader.add(String.valueOf(values.get(getString(R.string.who)).toString()));
                                  listDataChild.put(String.valueOf(values.get(getString(R.string.who)).toString()), String.valueOf(values.get(getString(R.string.what)).toString()));
                              }
                          }
  
                      }
  
                  } catch (JSONException e) {
                      e.printStackTrace();
                  }
                  listAdapter = new ExpandableListAdapter(context, listDataHeader, listDataChild);
  
                  // setting list adapter
                  expListView.setAdapter(listAdapter);
  
                 for(int j=0; j&lt;expListView.getCount(); j++){
                      expListView.getLastVisiblePosition();
                      expListView.getFirstVisiblePosition();
                      View v = expListView.getChildAt(j).findViewById(R.id.expListView);
                      ImageView iv = (ImageView) v.findViewById(R.id.exc);
                      iv.setImageResource(R.drawable.excl);
                  }
  
              }
          };
          dbTask.execute();
      }
  }
  </code></pre>
  
  <p>my xml - cell layout</p>
  
  <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="horizontal"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:weightSum="6"&gt;
  
      &lt;TextView
          android:id="@+id/lblListHeader"
          android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
          android:gravity="center_vertical|center_horizontal"
          android:layout_weight="5"
          android:layout_width="0dp"
          android:layout_height="60dp"
          android:textSize="18dp"  /&gt;
      &lt;ImageView
          android:id="@+id/exc"
          android:layout_weight="1"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:gravity="center_vertical|center_horizontal"
          android:layout_gravity="center_vertical" /&gt;
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>and expert_zone.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:layout_alignParentBottom="true"
      &gt;
  
      &lt;ExpandableListView
          android:id="@+id/expListView"
          android:layout_height="match_parent"
          android:layout_width="match_parent"/&gt;
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>How can I dynamically change image icon in this adapter?
  Suggestions are highly appreciated.</p>