web-dev-qa-db-ja.com

プログラムでrecyclerviewに新しい項目を追加しますか?

私はまだリサイクル業者の意見を取り戻そうとしています。リサイクルリストの初期化に使用するアレイリストがあります。

アダプタとレイアウトマネージャを設定して、リサイクル業者のビュー投稿に新しい項目を追加する方法を教えてください。

private void initData() {
        mItems = new ArrayList<String>();
        for (int i = 0; i < ITEMS_COUNT; i++) {
            mItems.add("Item " + (i + 1));
        }
    }

    private void initRecyclerView() {
        mRecentRecyclerView = (RecyclerView) findViewById(R.id.recentrecyclerView);
        mRecentRecyclerView.setHasFixedSize(true);
        mRecentLayoutManager = new LinearLayoutManager(this);
        mRecentRecyclerView.setLayoutManager(mRecentLayoutManager);



        mAdapter = new RecyclerView.Adapter<CustomViewHolder>() {
            @Override
            public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.notice_snippet
                        , viewGroup, false);
                return new CustomViewHolder(view);
            }

            @Override
            public void onBindViewHolder(CustomViewHolder viewHolder, int i) {
                viewHolder.noticeSubject.setText(mItems.get(i));
            }

            @Override
            public int getItemCount() {
                return mItems.size();
            }

        };
        mRecentRecyclerView.setAdapter(mAdapter);

    private class CustomViewHolder extends RecyclerView.ViewHolder {

        private TextView noticeSubject;

        public CustomViewHolder(View itemView) {
            super(itemView);

            noticeSubject = (TextView) itemView.findViewById(R.id.notice_subject);
        }
    }

だから基本的に私はinitdata()initRecyclerView()の後に、どうやってRecyclerViewに新しいアイテムを追加するのですか?

96
Shubham Kanodia

まずあなたのアイテムをmItemsに追加してから、

mAdapter.notifyItemInserted(mItems.size() - 1);

この方法は次のものよりも優れています。

mAdapter.notifyDataSetChanged();

パフォーマンスで。

231
Mostafa

データ構造(mItems)に追加して、データセットの変更についてアダプタに通知するだけです。

private void addItem(String item) {
  mItems.add(item);
  mAdapter.notifyDataSetChanged();
}

addItem("New Item");
32

リストに複数の項目を追加している場合は、これを使用します。

mAdapter.notifyItemRangeInserted(startPosition, itemcount);

これは、positionStartから始まる現在反映されているitemCountアイテムが新しく挿入されたことを登録オブザーバに通知します。以前はpositionStart以降に位置していたアイテムが、位置positinStart + itemCountから始まるようになりました。

データセット内の既存の項目はまだ最新のものと見なされます。

11
Nitin Anand