public void add(LinkFilter linkCount, Util.Lang lang) {

    // make sure linkCount is unique. technically should be overriding equals() in LinkFilter, but
    // this actually isn't a strict definition right n
    boolean exists = false;
    ListIterator<LinkFilter> linkIt = linkSelectorQueue.listIterator(0);
    while (linkIt.hasNext()) {
      LinkFilter tempLC = linkIt.next();
      if (LinkFilter.pseudoEquals(tempLC, linkCount)) {
        exists = true;
        break;
      }
    }
    if (!exists) {
      if (linkSelectorQueue.size() >= MAX_NUM_LINK_SELECTORS) linkSelectorQueue.remove();
      linkSelectorQueue.add(linkCount);
    }

    update(linkCount, lang);
  }
  // if currLinkCount == null, all linkSelectorBarButtons will be gray
  public void update(LinkFilter currLinkCount, Util.Lang lang) {
    this.currLinkCount = currLinkCount;
    selectorListLayout.removeAllViews();
    if (linkSelectorQueue == null) return;
    ListIterator<LinkFilter> linkIt = linkSelectorQueue.listIterator(linkSelectorQueue.size());
    while (linkIt.hasPrevious()) {
      // add children in reverse order
      LinkFilter tempLC = linkIt.previous();
      LinkSelectorBarButton lssb =
          new LinkSelectorBarButton(activity, tempLC, activity.getBook(), lang);
      lssb.setOnClickListener(linkSelectorBarButtonClick);
      selectorListLayout.addView(lssb);

      if (!LinkFilter.pseudoEquals(tempLC, currLinkCount)) {
        lssb.setTextColor(Util.getColor(activity, R.attr.text_chapter_header_color));
      }
    }

    Settings.Link.setLinks(activity.getBook().getTitle(Util.Lang.EN), linkSelectorQueue);
  }
 // segment is used to update segment list
 public void setCurrLinkCount(LinkFilter linkCount, Segment segment) {
   // try not to update too often
   if (!linkCount.equals(currLinkCount)) {
     currLinkCount = linkCount;
     if (segment
         != null) // o/w no need to update itemList. You probably just initialized LinkTextAdapter
     try {
         setItemList(Link.getLinkedTexts(segment, currLinkCount));
       } catch (API.APIException e) {
         setItemList(new ArrayList<Segment>());
         API.makeAPIErrorToast(activity);
       } catch (Exception e) {
         setItemList(new ArrayList<Segment>());
         try {
           Toast.makeText(
                   activity, MyApp.getRString(R.string.error_getting_links), Toast.LENGTH_SHORT)
               .show();
         } catch (Exception e1) {
           e1.printStackTrace();
         }
       }
   }
 }