Code example for ExpandableListView

Methods: setOnItemClickListenersetSelection, setEmptyView

0
   * Set the currently selected list item to the specified position with the 
   * adapter's data 
   */ 
  public void setSelection(int position) {
    ensureList(); 
    expandableListView.setSelection(position);
  } 
 
  public long getSelectedPosition() { 
    ensureList(); 
    return expandableListView.getSelectedPosition();
  } 
 
  public long getSelectedId() { 
    ensureList(); 
    return expandableListView.getSelectedId();
  } 
 
  public ExpandableListView getExpandableListView() {
    ensureList(); 
    return expandableListView;
  } 
 
  /** 
   * The default content for a ListFragment has a TextView that can be shown 
   * when the list is empty. If you would like to have it shown, call this 
   * method to supply the text it should use. 
   */ 
  public void setEmptyText(CharSequence text) {
    ensureList(); 
    if (mStandardEmptyView == null) {
      throw new IllegalStateException("Can't be used with a custom content view");
    } 
    mStandardEmptyView.setText(text);
    if (!mSetEmptyText) {
      expandableListView.setEmptyView(mStandardEmptyView);
      mSetEmptyText = true;
    } 
  } 
 
  /** 
   * Control whether the list is being displayed. You can make it not displayed 
   * if you are waiting for the initial data to show in it. During this time an 
   * indeterminant progress indicator will be shown instead. 
   * <p/> 
   * <p> 
   * Applications do not normally need to use this themselves. The default 
   * behavior of ListFragment is to start with the list not being shown, only 
   * showing it once an adapter is given with 
   * {@link #setListAdapter(ListAdapter)}. If the list at that point had not 
   * been shown, when it does get shown it will be do without the user ever 
   * seeing the hidden state. 
   *  
   * @param shown 
   *          If true, the list view is shown; if false, the progress indicator. 
   *          The initial value is true. 
   */ 
  public void setListShown(boolean shown) {
    setListShown(shown, true);
  } 
 
  /** 
   * Like {@link #setListShown(boolean)}, but no animation is used when 
   * transitioning from the previous state. 
   */ 
  public void setListShownNoAnimation(boolean shown) {
    setListShown(shown, false);
  } 
 
  /** 
   * Control whether the list is being displayed. You can make it not displayed 
   * if you are waiting for the initial data to show in it. During this time an 
   * indeterminant progress indicator will be shown instead. 
   *  
   * @param shown 
   *          If true, the list view is shown; if false, the progress indicator. 
   *          The initial value is true. 
   * @param animate 
   *          If true, an animation will be used to transition to the new state. 
   */ 
  private void setListShown(boolean shown, boolean animate) {
    ensureList(); 
    if (mListShown == shown) {
      return; 
    } 
    mListShown = shown;
    if (mListContainer != null) {
      if (shown) {
        if (animate) {
          mListContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in));
        } 
        mListContainer.setVisibility(View.VISIBLE);
      } else { 
        if (animate) {
          mListContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out));
        } 
        mListContainer.setVisibility(View.GONE);
      } 
    } 
  } 
 
  /** Get the ListAdapter associated with this activity's ListView. */ 
  public ExpandableListAdapter getExpandableListAdapter() {
    return mAdapter;
  } 
 
  private void ensureList() { 
    if (expandableListView != null) {
      return; 
    } 
    View root = getView();
    if (root == null) {
      throw new IllegalStateException("Content view not yet created");
    } 
    if (root instanceof ExpandableListView) {
      expandableListView = (ExpandableListView) root;
    } else { 
      mStandardEmptyView = (TextView) root.findViewById(INTERNAL_EMPTY_ID);
      if (mStandardEmptyView == null) {
        mEmptyView = root.findViewById(android.R.id.empty);
      } 
      mListContainer = root.findViewById(INTERNAL_LIST_CONTAINER_ID);
      View rawListView = root.findViewById(android.R.id.list);
      if (!(rawListView instanceof ExpandableListView)) {
        if (rawListView == null) {
          throw new RuntimeException("Your content must have a ExpandableListView whose id attribute is "
              + "'android.R.id.list'"); 
        } 
        throw new RuntimeException("Content has view with id attribute 'android.R.id.list' "
            + "that is not a ExpandableListView class"); 
      } 
      expandableListView = (ExpandableListView) rawListView;
      if (mEmptyView != null) {
        expandableListView.setEmptyView(mEmptyView);
      } 
    } 
    mListShown = true;
    expandableListView.setOnItemClickListener(mOnClickListener);
    if (mAdapter != null) {
      setListAdapter(mAdapter);
    } else { 
      // We are starting without an adapter, so assume we won't 
      // have our data right away and start with the progress indicator.