国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

RecyclerView簡介與實例

iamyoung001 / 618人閱讀

摘要:是傳統(tǒng)的一個很好的替代,具有很好的拓展性,初次接觸可能會被其復雜的邏輯搞暈,本文就以一個簡單的實例帶小伙伴們理清其中的關系。一添加依賴包本文所使用的為。二準備工作首先創(chuàng)建一個名為的對應的布局文件名為。則是返回需要相應布局的總數(shù)。。

RecyclerView是傳統(tǒng)ListView的一個很好的替代,具有很好的拓展性,初次接觸RecyclerView可能會被其復雜的邏輯搞暈,本文就以一個簡單的實例帶小伙伴們理清其中的關系。

一 添加依賴包

本文所使用的IDE為AndroidStudio。

依次點擊File--->Project Structure--->左下角Module的app--->Dependencis--->點擊左下方的+號,選擇recycler view即可。

二 準備工作

首先創(chuàng)建一個名為NotesListFragment的fragment,對應的布局文件名為fragment_notes_list。接著將該fragment加入到主Activity中(關于如何在Activity中操作fragment將另作文章說明,此處省略啦),接下來在NotesListFragment中定義一個私有字段

private RecyclerView noteRecycler;

我們將要實現(xiàn)的是一個顯示筆記的RecyclerView,這里將筆記類定義如下:

package com.aristark.note;

import java.util.Date;
import java.util.UUID;
public class Note {

    private UUID uuid;
    private String title;
    private String content;
    private Date date;
    private String tag;

    public Note{
        uuid = UUID.randomUUID();
        date = new Date();
    }

    public UUID getUuid() {
        return uuid;
    }

    public Date getDate() {
        return date;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

    public String getTag() {
        return tag;
    }
}

為了操作方便,我們再創(chuàng)建一個NoteLab類:

package com.aristark.note;

import android.content.Context;
import java.util.ArrayList;

public class NoteLab {
    private static NoteLab sNoteLab; //for the global use
    private ArrayList notes;

    private NoteLab(Context context){
        notes = new ArrayList();

        //generate 100 Note Objects
        for (int i=0;i<100;i++){
            Note note = new Note();
            note.setTitle("this is title "+i);
            note.setContent("this is content"+i+"balabalabalabalalabalabalabalabalala
balabalabalabalalabalabalabala    balala
balabalabalabalalabalabalabalabalala
balabalabalabalalabalabalab    alabalala
balabalabalabalalabalabalabalabalala
");
            notes.add(note);
        }
    }

    public static NoteLab getNoteLab(Context context){
        if (sNoteLab == null){
            sNoteLab = new NoteLab(context);
        }

        return sNoteLab;
    }

    public ArrayList getNotes() {
        return notes;
    }
}

注意體會該類所使用的單例模式,sNoteLab以靜態(tài)方式存在,既節(jié)省了內(nèi)存,又可以讓應用的各個部件方便的訪問。在構造方法NoteLab中,我們生成100個Note對象以作后面的測試。

三 ViewHolder和Adapter

這兩個類是實現(xiàn)列表的關鍵,其實從字面含義很容易猜測這兩個類的作用,ViewHolder操作的是列表每個部分的布局,而Adapter則是用數(shù)據(jù)去填充View,雖然解釋的不是很準確,但姑且這么理解是沒問題的。那么下面我們就在NotesListFragment里創(chuàng)建這兩個類:

1 首先創(chuàng)建NoteHolder

private class NoteHolder extends RecyclerView.ViewHolder{

    public NoteHolder(View root) {
        super(root);
    }       
}

這個類很簡單,值得注意的是自動創(chuàng)建的構造方法所傳入的參數(shù)名叫itemView,這里我將其改為root,因為接下來我們通過這個構造方法傳進來的是一個完整的布局文件,而不僅僅是一個控件。

2 創(chuàng)建Adapter

private class NoteAdapter extends RecyclerView.Adapter{
    private List notes;

    public NoteAdapter(List notes){
        this.notes = notes;
    }

    public void setNotes(List notes) {
        this.notes = notes;
    }

    @Override
    public NoteHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(NoteHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

前面說了Adapter是有關于數(shù)據(jù)的操作了,因此在類的內(nèi)部定義notes字段也很容易理解,我們再來看看這里覆寫的三個方法,onCreateViewHolder返回值是NoteHolder,因此它是用來創(chuàng)建ViewHolder,onBindViewHolder則可以直接操作NoteHolder,position指的是當前View處在整個List的位置(我們的目的是要創(chuàng)建類似于微信消息列表的一個列表,其每個部件的布局其實是一樣的,只是填充的數(shù)據(jù)不一樣而已),以便按照當前的位置填入相應的數(shù)據(jù)。getItemCount則是返回需要相應布局的總數(shù)。talk is cheap,show me the code。說再多恐怕也難以表達,下面看代碼,多看幾遍,自然而然就會用了。

private class NoteAdapter extends RecyclerView.Adapter{
    private List notes;

    public NoteAdapter(List notes){
        this.notes = notes;
    }

    public void setNotes(List notes) {
        this.notes = notes;
    }

    @Override
    public NoteHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
        View view = layoutInflater.inflate(R.layout.list_item_note,parent,false);
        return new NoteHolder(view);
    }

    @Override
    public void onBindViewHolder(NoteHolder holder, int position) {
        Note note = notes.get(position);
        holder.bindView(note);
    }

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

其中R.layout.list_item_note的布局文件如下:





    






這里只簡單的使用了Note類中title和content兩個字段,其實就是這個view就是形成整個列表,只是依次填充類不同的數(shù)據(jù)而已。

四 RecyclerView的使用

前面已經(jīng)準備好了ViewHolder和Adapter,接下來要做的就是將這些部件組裝在一起,最后將整個fragment貼出來,大家注意onCreateView里是 Ruhr操作的!

public class NotesListFragment extends Fragment {
    private RecyclerView noteRecycler;
    private NoteAdapter noteAdapter;

    public NotesListFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        // Inflate the layout for this fragment
//return inflater.inflate(R.layout.fragment_notes_list, container, false);
        View root = inflater.inflate(R.layout.fragment_notes_list,container,false);

        noteRecycler = (RecyclerView) root.findViewById(R.id.note_recycler_view);
        noteRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
        NoteLab noteLab = NoteLab.getNoteLab(getActivity());
        ArrayList notes = noteLab.getNotes();
        noteAdapter = new NoteAdapter(notes);
        noteRecycler.setAdapter(noteAdapter);
        return root;
    }

    private class NoteHolder extends RecyclerView.ViewHolder{
        private TextView noteTitle;
        private TextView noteContent;

        public NoteHolder(View root) {
            super(root);
            noteTitle = (TextView) root.findViewById(R.id.list_item_note_title);
            noteContent = (TextView) root.findViewById(R.id.list_item_note_content);
        }

        public void bindView(Note note){
            noteTitle.setText(note.getTitle());
            noteContent.setText(note.getContent());
        }

    }

    private class NoteAdapter extends RecyclerView.Adapter{
        private List notes;

        public NoteAdapter(List notes){
            this.notes = notes;
        }

        public void setNotes(List notes) {
            this.notes = notes;
        }

        @Override
        public NoteHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            View view = layoutInflater.inflate(R.layout.list_item_note,parent,false);
            return new NoteHolder(view);
        }

        @Override
        public void onBindViewHolder(NoteHolder holder, int position) {
            Note note = notes.get(position);
            holder.bindView(note);
        }

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

}
后記

最后給大家貼出最后的效果圖吧!

這是我第一次寫博客,解釋的不多,代碼較多,一來是因為我沒有很多表達的經(jīng)驗,二來我覺得很多時候類名,函數(shù)名足以說明它的用途,過多解釋怕會誤導大家。whatever,還是希望得到大家的支持,我會在堅持寫代碼的同時也堅持把博客寫下去,是對自己學到的知識的總結,也希望確確實實可以幫到需要幫助的朋友。我的QQ891871898,大家有任何技術交流的問題都可以聯(lián)系我,批評也可以!另外,求工作!

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65572.html

相關文章

  • RecyclerView問題匯總

    摘要:缺點自動裝箱的存在意味著每一次插入都會有額外的對象創(chuàng)建。對象本身是一層額外需要被創(chuàng)建以及被垃圾回收的對象。相較于我們舍棄了和類型的放棄了并依賴于二分法查找。 目錄介紹 25.0.0.0 請說一下RecyclerView?adapter的作用是什么,幾個方法是做什么用的?如何理解adapter訂閱者模式? 25.0.0.1 ViewHolder的作用是什么?如何理解ViewHolder...

    boredream 評論0 收藏0

發(fā)表評論

0條評論

iamyoung001

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<