Пример #1
0
  private final class BookmarksAdapter extends BaseAdapter
      implements AdapterView.OnItemClickListener, View.OnCreateContextMenuListener {
    private final List<Bookmark> myBookmarks =
        Collections.synchronizedList(new LinkedList<Bookmark>());
    private final boolean myShowAddBookmarkItem;

    BookmarksAdapter(ListView listView, boolean showAddBookmarkItem) {
      myShowAddBookmarkItem = showAddBookmarkItem;
      listView.setAdapter(this);
      listView.setOnItemClickListener(this);
      listView.setOnCreateContextMenuListener(this);
    }

    public List<Bookmark> bookmarks() {
      return Collections.unmodifiableList(myBookmarks);
    }

    public void addAll(final List<Bookmark> bookmarks) {
      runOnUiThread(
          new Runnable() {
            public void run() {
              synchronized (myBookmarks) {
                for (Bookmark b : bookmarks) {
                  final int position = Collections.binarySearch(myBookmarks, b, myComparator);
                  if (position < 0) {
                    myBookmarks.add(-position - 1, b);
                  }
                }
              }
              notifyDataSetChanged();
            }
          });
    }

    public void add(final Bookmark b) {
      runOnUiThread(
          new Runnable() {
            public void run() {
              synchronized (myBookmarks) {
                final int position = Collections.binarySearch(myBookmarks, b, myComparator);
                if (position < 0) {
                  myBookmarks.add(-position - 1, b);
                }
              }
              notifyDataSetChanged();
            }
          });
    }

    public void remove(final Bookmark b) {
      runOnUiThread(
          new Runnable() {
            public void run() {
              myBookmarks.remove(b);
              notifyDataSetChanged();
            }
          });
    }

    public void clear() {
      runOnUiThread(
          new Runnable() {
            public void run() {
              myBookmarks.clear();
              notifyDataSetChanged();
            }
          });
    }

    public void onCreateContextMenu(
        ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
      final int position = ((AdapterView.AdapterContextMenuInfo) menuInfo).position;
      if (getItem(position) != null) {
        menu.setHeaderTitle(getItem(position).getText());
        menu.add(0, OPEN_ITEM_ID, 0, myResource.getResource("open").getValue());
        // menu.add(0, EDIT_ITEM_ID, 0, myResource.getResource("edit").getValue());
        menu.add(0, DELETE_ITEM_ID, 0, myResource.getResource("delete").getValue());
      }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      final View view =
          (convertView != null)
              ? convertView
              : LayoutInflater.from(parent.getContext())
                  .inflate(R.layout.bookmark_item, parent, false);
      final ImageView imageView = ViewUtil.findImageView(view, R.id.bookmark_item_icon);
      final TextView textView = ViewUtil.findTextView(view, R.id.bookmark_item_text);
      final TextView bookTitleView = ViewUtil.findTextView(view, R.id.bookmark_item_booktitle);

      final Bookmark bookmark = getItem(position);
      if (bookmark == null) {
        imageView.setVisibility(View.VISIBLE);
        imageView.setImageResource(R.drawable.ic_list_plus);
        textView.setText(myResource.getResource("new").getValue());
        bookTitleView.setVisibility(View.GONE);
      } else {
        imageView.setVisibility(View.GONE);
        textView.setText(bookmark.getText());
        if (myShowAddBookmarkItem) {
          bookTitleView.setVisibility(View.GONE);
        } else {
          bookTitleView.setVisibility(View.VISIBLE);
          bookTitleView.setText(bookmark.getBookTitle());
        }
      }
      return view;
    }

    @Override
    public final boolean areAllItemsEnabled() {
      return true;
    }

    @Override
    public final boolean isEnabled(int position) {
      return true;
    }

    @Override
    public final long getItemId(int position) {
      return position;
    }

    @Override
    public final Bookmark getItem(int position) {
      if (myShowAddBookmarkItem) {
        --position;
      }
      return (position >= 0) ? myBookmarks.get(position) : null;
    }

    @Override
    public final int getCount() {
      return myShowAddBookmarkItem ? myBookmarks.size() + 1 : myBookmarks.size();
    }

    public final void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      final Bookmark bookmark = getItem(position);
      if (bookmark != null) {
        gotoBookmark(bookmark);
      } else {
        addBookmark();
      }
    }
  }