Android項(xiàng)目實(shí)踐——自定義RecyclerViewAdapter模板代碼

版權(quán)聲明:本文為博主原創(chuàng)文章告唆,未經(jīng)博主允許不得轉(zhuǎn)載镰官。
系列教程:Android開發(fā)之從零開始系列

大家要是看到有錯(cuò)誤的地方或者有啥好的建議,歡迎留言評論

前言:項(xiàng)目開發(fā)中難免會敲很多重復(fù)的代碼蜈彼,尤其是像 Adapter(適配器)這種使用頻率高且格式基本一致的類案狠,這篇博客將以 RecyclerViewAdapter為例教大家如何自定義自己的模板代碼實(shí)現(xiàn)一鍵生成


一般RecyclerViewAdapter中會包含初始化方法味廊,ViewHolder設(shè)置列表項(xiàng)點(diǎn)擊或長按的接口等等雷猪,下面是RecyclerViewAdapter的一個(gè)例子

package com.test.bauztest.BaseRecyclerViewAdapter;//你的包名

//各種類的導(dǎo)入
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import java.util.Map;

//類的File Header
/**
 * Created by anlia on 2017/10/30.
 */
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {

    private Context context;
    private List<Map<String,String>> list;//聲明一個(gè)傳參類型為Map<String,String>的list
    private OnItemClickListener mOnItemClickListener;

    class ViewHolder extends RecyclerView.ViewHolder{
        // TODO: 聲明組件

        public ViewHolder(View view) {
            super(view);
            // TODO: 注冊組件,view.findViewById(R.id.xxx)
        }

    }

    public MyRecyclerViewAdapter(Context context,List<Map<String,String>> list) {
        this.context = context;
        this.list = list;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
        void onItemLongClick(View view , int position);
    }

    public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
        this.mOnItemClickListener = mOnItemClickListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // TODO: 為對應(yīng)itemViewId賦值,例:R.layout.xxx
        int itemViewId = 0;
        ViewHolder holder = new ViewHolder(LayoutInflater.from(context).inflate(itemViewId, parent, false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        // TODO: 綁定組件的事件


        // 如果設(shè)置了回調(diào)睛竣,則設(shè)置點(diǎn)擊事件
        if (mOnItemClickListener != null)
        {
            holder.itemView.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickListener.onItemClick(holder.itemView, pos);
                }
            });

            holder.itemView.setOnLongClickListener(new View.OnLongClickListener()
            {
                @Override
                public boolean onLongClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickListener.onItemLongClick(holder.itemView, pos);
                    return false;
                }
            });
        }
    }

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

基本每個(gè)Adapter都包含上面這些內(nèi)容,經(jīng)常復(fù)制粘貼然后再去改類名是非常影響開發(fā)效率的一件事求摇,我們可以利用Android Studio中設(shè)置模板代碼的功能來減輕我們的負(fù)擔(dān)射沟,進(jìn)入模板代碼設(shè)置有兩種方法

  • 點(diǎn)擊File → Settings → Editor → File and Code Templates,然后點(diǎn)擊新增月帝,編寫我們的模板代碼即可躏惋,如圖
  • 還有另外一種方法更加快捷,點(diǎn)擊File → New → Edit File Templates

因?yàn)槟0宕a要有通用性嚷辅,所以包名簿姨、類名以及List的傳參我們都不能寫死,上面的Adapter例子需要略微修改,注意模板代碼中修改的地方

//自動生成包名
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;

//用默認(rèn)的File Header即可
#parse("File Header.java")
public class ${NAME}<E> extends RecyclerView.Adapter<${NAME}.ViewHolder> {//包名也需要自動生成扁位,同時(shí)注意List傳參為泛型

    private Context context;
    private List<E> list;//數(shù)據(jù)集合
    private OnItemClickListener mOnItemClickListener;

    class ViewHolder extends RecyclerView.ViewHolder{
        // TODO: 聲明組件

        public ViewHolder(View view) {
            super(view);
            // TODO: 注冊組件,view.findViewById(R.id.xxx)
        }

    }

    public ${NAME}(Context context,List<E> list) {
        this.context = context;
        this.list = list;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
        void onItemLongClick(View view , int position);
    }

    public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
        this.mOnItemClickListener = mOnItemClickListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // TODO: 為對應(yīng)itemViewId賦值,例:R.layout.xxx
        int itemViewId = 0;
        ViewHolder holder = new ViewHolder(LayoutInflater.from(context).inflate(itemViewId, parent, false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        // TODO: 綁定組件的事件


        // 如果設(shè)置了回調(diào)准潭,則設(shè)置點(diǎn)擊事件
        if (mOnItemClickListener != null)
        {
            holder.itemView.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickListener.onItemClick(holder.itemView, pos);
                }
            });

            holder.itemView.setOnLongClickListener(new View.OnLongClickListener()
            {
                @Override
                public boolean onLongClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickListener.onItemLongClick(holder.itemView, pos);
                    return false;
                }
            });
        }
    }

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

模板代碼設(shè)置好后,我們只需要簡單幾步即可自動生成RecyclerViewAdapter代碼

至此本篇教程到此結(jié)束域仇,如果大家看了感覺還不錯(cuò)麻煩點(diǎn)個(gè)贊刑然,你們的支持是我最大的動力~


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市暇务,隨后出現(xiàn)的幾起案子泼掠,更是在濱河造成了極大的恐慌,老刑警劉巖垦细,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件择镇,死亡現(xiàn)場離奇詭異,居然都是意外死亡括改,警方通過查閱死者的電腦和手機(jī)腻豌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘱能,“玉大人吝梅,你說我怎么就攤上這事∪锹睿” “怎么了苏携?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長析苫。 經(jīng)常有香客問我兜叨,道長,這世上最難降的妖魔是什么衩侥? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任国旷,我火速辦了婚禮,結(jié)果婚禮上茫死,老公的妹妹穿的比我還像新娘跪但。我一直安慰自己,他們只是感情好峦萎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布屡久。 她就那樣靜靜地躺著,像睡著了一般爱榔。 火紅的嫁衣襯著肌膚如雪被环。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天详幽,我揣著相機(jī)與錄音筛欢,去河邊找鬼浸锨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛版姑,可吹牛的內(nèi)容都是我干的柱搜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼剥险,長吁一口氣:“原來是場噩夢啊……” “哼聪蘸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起表制,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤健爬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夫凸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浑劳,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阱持,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年夭拌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衷咽。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸽扁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镶骗,到底是詐尸還是另有隱情桶现,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布鼎姊,位于F島的核電站骡和,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏相寇。R本人自食惡果不足惜慰于,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唤衫。 院中可真熱鬧婆赠,春花似錦、人聲如沸佳励。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赃承。三九已至妙黍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞧剖,已是汗流浹背拭嫁。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人噩凹。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓巴元,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驮宴。 傳聞我的和親對象是個(gè)殘疾皇子逮刨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評論 25 707
  • 1 背景 一個(gè)項(xiàng)目開發(fā)必然會涉及團(tuán)隊(duì)協(xié)作,而工程質(zhì)量就需要團(tuán)隊(duì)去保證堵泽。一般我們期望的代碼:無潛在風(fēng)險(xiǎn)修己、無重復(fù)邏輯、...
    zyl06閱讀 3,213評論 5 16
  • 上周五的互動話題是“和青春期的戰(zhàn)爭”迎罗,我收到很多父母的留言睬愤,印象最深的是一位父親的留言:“家有青春期的孩子,就像身...
    我的心靈大白閱讀 1,523評論 0 4
  • 心累纹安,也許是壓力大尤辱。看著別人接二連三地開單厢岂,還自己依然沒業(yè)績光督,不免會著急。什么時(shí)候自己才能開單塔粒,如果一直不開單结借,自...
    流浪癡人閱讀 352評論 2 1
  • 文/沐伊 圖/花瓣網(wǎng) 總有一天船老,你不再需要轟轟烈烈的愛情,不再需要驚天地泣鬼神的誓言圃酵,你只想有那么一個(gè)人能夠一直...
    沐伊520閱讀 482評論 0 1