/**
   * Refreshes the content of the parent list view while maintaining the current vertical position
   * in the list view.
   */
  private void refreshListView(ViewGroup parent, Group updatedGroup) {

    // Get position of first and last visible list items
    AbsListView parentListView = (AbsListView) parent.findViewById(android.R.id.list);
    int firstVisible = parentListView.getFirstVisiblePosition();
    int lastVisible = parentListView.getLastVisiblePosition();

    // Populate list view
    mItems.clear();
    List<Group> groups = Group.getAllSortedByDisplayOrder();
    for (Group group : groups) {
      mItems.add(group.name);
    }
    notifyDataSetChanged();

    // Handle case where item is at visible top and moved up.
    if (firstVisible >= updatedGroup.getDisplayOrder()) {
      parentListView.setSelection(updatedGroup.getDisplayOrder() - 1);
      // Handle case where item is at visible bottom and moved down.
    } else if (lastVisible < updatedGroup.getDisplayOrder()) {
      parentListView.setSelection(firstVisible + 1);
      // Handle move cases in the middle of viewable listview.
    } else {
      parentListView.setSelection(firstVisible);
    }
  }
 /** Sets up the buttons for changing the display order. TODO Replace with drag and drop handles */
 private void setupMoveButtons(int position) {
   // Stop buttons from preventing list item click event
   mMoveDown.setFocusable(false);
   mMoveDown.setFocusableInTouchMode(false);
   mMoveUp.setFocusable(false);
   mMoveUp.setFocusableInTouchMode(false);
   // Disable move down buttons for first list items.
   if (position == 0) {
     mMoveUp.setEnabled(false);
     mMoveUp.setVisibility(View.INVISIBLE);
   }
   // Disable move up button for last list item
   int last = Group.getLast().getDisplayOrder();
   if (position + 1 == last) {
     mMoveDown.setEnabled(false);
     mMoveDown.setVisibility(View.INVISIBLE);
     if (last == 2) mMoveDown.setVisibility(View.GONE);
   }
 }
 private void setupTextLabels(int position) {
   mGroupName.setText(mItems.get(position));
   // Hide default label for non-default groups
   Group current = Group.getByDisplayOrder(position + 1);
   if (!current.isDefault()) mDefaultGroup.setVisibility(View.GONE);
 }