12/08/2018, 17:26

Cách làm RecyclerView Adapter tốt hơn với Ít Code hơn

Hằng ngày nhiều người trong chúng ta vẫn thường xử dụng RecyclerView.Adapter để custom hiển thị 1 list data trên RecyclerView, đó là một việc làm quen thuộc. RecyclerView có một vài ưu điểm hơn so với ListView và GridView trước đây, mặc dù vậy để làm cho RecyclerView trở lên tốt hơn bằng cách nào ...

Hằng ngày nhiều người trong chúng ta vẫn thường xử dụng RecyclerView.Adapter để custom hiển thị 1 list data trên RecyclerView, đó là một việc làm quen thuộc. RecyclerView có một vài ưu điểm hơn so với ListView và GridView trước đây, mặc dù vậy để làm cho RecyclerView trở lên tốt hơn bằng cách nào ? Bài viết này sẽ trả lời cho bạn câu hỏi này, tiếp tục nhé ^^

Tháng 2 vừa rồi Google released bản android support version 27.1.0, trong bản này cung cấp thêm ListAdapter cho RecyclerView tích hợp sẵn AsyncListDiffer giúp cho developer custom adapter trở lên dễ dàng và tối giản hơn. Vậy thì ListAdapter làm được những gì và nó khác biệt như thế nào với cách làm thông thường ? Để trực quan hơn thì những dòng code phía dưới mình sẽ đi vào 1 ứng dụng demo (Tạo ghi chú) và full source mình đính kèm ở dưới cuối bài viết. (cracker)

RecyclerView.Adapter (cách làm cũ)

Đôi nét về ứng dụng: Tạo ghi chú Là một ứng dụng đơn giản cho phép : Thêm - Sửa - Xóa các note (mình demo code tạm với chức năng thêm trước nhé)

Code bằng Java:

NoteAdapter.java

public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.NoteVH> {

    private List<Note> mNoteList;

    public NoteAdapter(List<Note> noteList) {
        mNoteList = noteList;
    }

    @NonNull
    @Override
    public NoteVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new NoteVH(LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_note, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull NoteVH holder, int position) {
        holder.bindData(mNoteList.get(position));
    }

    public void addNewNote(Note note) {
        if (!mNoteList.contains(note)) {
            mNoteList.add(note);
            notifyItemInserted(mNoteList.size());
        }
    }

    @Override
    public int getItemCount() {
        return mNoteList != null ? mNoteList.size() : 0;
    }

    class NoteVH extends RecyclerView.ViewHolder {

        private TextView title;

        public NoteVH(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.title);
        }

        public void bindData(Note note) {
            title.setText(note.getTitle());
        }
    }
}

Đây là cách mà chắc hẳn nhiều bạn đã và đang làm, tạm thời chúng ta chưa có comment gì vội nhé. Thử chuyển nó sang Kotlin xem có gì không nào ?             </div>
            
            <div class=

0