在写项目的时候一般都会写个BaseActivity ,来减少重复代码编写和共有内容的整理封装(侵删)

前几天,用kotlin语言写了个BaseActivityBaseAdapter

界面是多么不堪入目,不过不要在意细节,我也挺绝望的(写PDA多了发现这样也比那好看多了)


引用

dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"    implementation 'com.android.support:appcompat-v7:26.1.0'    implementation 'com.android.support:design:26.1.0'    implementation 'com.android.support.constraint:constraint-layout:1.0.2'    testImplementation 'junit:junit:4.12'    implementation "org.jetbrains.anko:anko-sdk15:0.9.1"    implementation "org.jetbrains.anko:anko-appcompat-v7:0.9.1"    implementation "org.jetbrains.anko:anko-design:0.9.1"    androidTestImplementation 'com.android.support.test:runner:1.0.1'    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'    implementation 'com.github.d-max:spots-dialog:0.7@aar'    implementation ('com.android.support:cardview-v7:26.1.0'){        exclude group: 'com.android.support'    }

BaseAdapter

abstract class BaseActivity:AppCompatActivity(), BaseView {    abstract fun getContentViewId():Int    var mContext: Context?=null    lateinit var dialog: SpotsDialog    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(getContentViewId())        mContext=this        dialog=SpotsDialog(this)        initView()        initEvent()    }   //显示加载    fun showLoad(){        dialog.show()    }    //隐藏加载    fun disLoad(){        dialog.dismiss()    }    //提示    override fun showTipMessage( msg: String) {       Toast.makeText(this,msg,Toast.LENGTH_SHORT).show()    }    override fun getNetKey(): String {        return javaClass.simpleName    }    //移除    fun removeActivity(cls:Class<*>){        ActivityManager.instance.finishActivity(cls)    }    fun actCount(){        ActivityManager.instance.ListCount()    }    /**     * 触发手机返回按钮     */    override fun onBackPressed(){        ActivityManager.instance.removeActivity(this@BaseActivity)    }   //anko    fun backShow(){        alert("返回会清除该页面数据") {            title("提示")            yesButton { onBackPressed() }            noButton { }        }.show()    }   //anko    fun  setDialog(title:String, content:String ){        alert(content) {            title(title)            yesButton {  }            noButton { }        }.show()    }    override fun onDestroy() {       // presenter.dispose()       // presenter.detach()        super.onDestroy()    }    /**     * 触发手机返回按钮     */   fun onFinish(){        ActivityManager.instance.removeActivity(this@BaseActivity)    }}

由于写BaseAdapter是用kotlin的file写的,emmmm。。。有点小问题,不过不影响使用

class BaseViewHolder(itemView: View, private val mOnItemClickListener:BaseAdapter.OnItemClickListener?, private val mOnItemLongClickListener: BaseAdapter.OnItemLongClickListener?): RecyclerView.ViewHolder(itemView) , View.OnClickListener, View.OnLongClickListener {    override fun onClick(v: View?) {        mOnItemClickListener.let { v?.let { it1 -> mOnItemClickListener?.onItemClick(it1, getLayoutPosition()) } }    }    override fun onLongClick(v: View?): Boolean {        if (mOnItemLongClickListener != null) {            v?.let { it ->                mOnItemLongClickListener?.onLongItemClick(it, getLayoutPosition())            }        }        return true    }    private var views: SparseArray? = null    init {        itemView.setOnClickListener(this)        itemView.setOnLongClickListener(this)        this.views = SparseArray()    }    fun getTextView(viewId: Int): TextView {        return retrieveView(viewId)    }    fun getButton(viewId: Int): Button {        return retrieveView(viewId)    }    fun getImageView(viewId: Int): ImageView {        return retrieveView(viewId)    }    fun getView(viewId: Int): View {        return retrieveView(viewId)    }    fun getLinearlayout(viewId: Int): LinearLayout {        return retrieveView(viewId)    }    fun getCheckBox(viewId: Int): CheckBox {        return retrieveView(viewId)    }    fun  retrieveView(viewId: Int): T {        var v = views?.get(viewId)        if (v == null) {            v = itemView.findViewById(viewId)            views?.put(viewId, v)        }        return (v as T?)!!    }    abstract class BaseAdapter @JvmOverloads constructor(protected val context: Context, protected var layoutResId: Int, var datas: MutableList) : RecyclerView.Adapter() {        private var mOnItemClickListener: OnItemClickListener? = null        private var mOnItemLongClickListener: OnItemLongClickListener? = null        fun addDatas(datas: List) {            if (datas != null) {                this.datas?.addAll(datas)                notifyItemRangeChanged(this.datas!!.size - datas.size, datas.size)            }        }        fun clearData() {            datas?.clear()            notifyDataSetChanged()        }        override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): BaseViewHolder {            val view = LayoutInflater.from(context).inflate(layoutResId, viewGroup, false)            return BaseViewHolder(view, mOnItemClickListener, mOnItemLongClickListener)        }        override fun onBindViewHolder(holder: BaseViewHolder?, position: Int) {            val item = getItem(position)            convert(holder as H, item)        }        override fun getItemViewType(position: Int): Int {            return super.getItemViewType(position)        }        fun getItem(position: Int): T? {            return if (position >= datas!!.size) null else datas!![position]        }        override fun getItemCount(): Int {            return if (datas == null || datas!!.size <= 0) 0 else datas.size        }        fun clear() {            val it = datas!!.iterator()            while (it.hasNext()) {                val position = datas!!.indexOf(it.next())                it.remove()                notifyItemRemoved(position)            }        }        fun addData(position: Int, list: List?) {            list.let {                if (list?.count() as Int > 0) {                    for (t in list) {                        datas!!.add(position, t)                        notifyItemInserted(position)                    }                }            }        }        fun removeItem(t: T) {            datas?.remove(t)            notifyItemRemoved(datas!!.indexOf(t))        }        public interface OnItemClickListener {            fun onItemClick(view: View, position: Int)        }        public interface OnItemLongClickListener {            fun onLongItemClick(view: View, position: Int)        }        protected abstract fun convert(viewHoder: H, item: T?)        public fun setOnItemClickListener(listener: OnItemClickListener) {            this.mOnItemClickListener = listener        }        public fun setOnLongClickListener(listener: OnItemLongClickListener) {            this.mOnItemLongClickListener = listener        }    }}

写了个TestAdapter继承这个BaseAdapter

class TestAdapter (context:Context,layoutId:Int,list:ArrayList):BaseViewHolder.BaseAdapter(context,layoutId,list){    override fun convert(viewHoder: BaseViewHolder, item: String?) {        viewHoder.getTextView(R.id.textitem).text=item    }}

在Activity的调用

 adapter= TestAdapter(this,R.layout.test_item,list);        recyclerView.adapter=adapter

kotlin的绑定adapter这样的==java的setadapter()

recyclerView.adapter=adapter

对item的点击

     //点击        adapter?.setOnItemClickListener(object :BaseViewHolder.BaseAdapter.OnItemClickListener{            override fun onItemClick(view: View, position: Int) {               showTipMessage(list[position])            }        })        //长按        adapter?.setOnLongClickListener(object :BaseViewHolder.BaseAdapter.OnItemLongClickListener{            override fun onLongItemClick(view: View, position: Int) {                showTipMessage("长点击:"+list[position])            }        })

大致就是这样吧,具体业务还是得具体分析,继续往里面进行拓展, 还需要多磨合才了解kotlin

代码




更多相关文章

  1. Android(安卓)调用 startActivityForResult(intent,requestCode)
  2. Android(安卓)项目中的小需求
  3. Android(安卓)实现ListView的点击变色的实例
  4. Android(安卓)实现点击两次BACK键退出应用
  5. ActivityGroup中切换Activity
  6. Android(安卓)获取 H5中的按钮,点击
  7. Android解决使用findViewById时需要对返回值进行类型转换问题的
  8. 博客引用书单
  9. Android中点击文字打开QQ对话

随机推荐

  1. Android(安卓)测试工具集02
  2. Android中使用ALSA声卡
  3. Android(安卓)深入解析用户界面(四)
  4. android 在配置文件中指定上级activity
  5. android notes(1)
  6. Android(安卓)结束进程的方法
  7. 一张图带你掌握Android(安卓)Q上InputDis
  8. android 去掉应用程序自带的黑色的头部横
  9. Android错误信息汇总
  10. Android(安卓)Map开发基础知识学习笔记