詳解分別用Kotlin和java寫RecyclerView的示例
本文介紹了分別用Kotlin和java寫RecyclerView的示例,分享給大家,具體如下:
java:跟一般的寫法一樣,增加了按鈕響應(yīng)
MainActivity:
public class MainActivity extends AppCompatActivity implements RecyclerAdapter.OnItemClickListener{
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private RecyclerAdapter mRecyclerAdapter;
private ArrayListlist;
@Override
protected void onCreate(Bundlesaved InstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerItem item;
list = new ArrayList<>();
item = new RecyclerItem();
item.setName("No."+0);
list.add(item);
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerAdapter = new RecyclerAdapter(this,list);
mRecyclerAdapter.setOnItemClickListener(this);
// 豎直方向的網(wǎng)格樣式,每行一個(gè)Item
mLayoutManager=new GridLayoutManager(this,3,OrientationHelper.VERTICAL,false);
// 設(shè)置布局管理器
mRecyclerView.setLayoutManager(mLayoutManager);
// 設(shè)置adapter
mRecyclerView.setAdapter(mRecyclerAdapter);
// 設(shè)置Item添加和移除的動(dòng)畫
mRecyclerView.setItemAnimator(newDefaultItemAnimator());
}
//adapter的按鈕點(diǎn)擊事件
@Override
public void onItemContentClick(Viewview,intposition) {
//點(diǎn)擊最后一個(gè)按鈕增加一個(gè)item
if(position == list.size()-1) {
RecyclerItemitem=newRecyclerItem();
item.setName("No."+(position+1));
list.add(0,item);
//更新RecyclerView
mRecyclerAdapter.updateData(list);
}else{
Toast.makeText(this,"No."+position,Toast.LENGTH_SHORT).show();
}
}
}
Adapter:
public class RecyclerAdapter extends RecyclerView.Adapter{
private ArrayList mData;
private Context mContext;
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.onItemClickListener = listener;
}
public RecyclerAdapter(Context mContext,ArrayList mData){
this.mData = mData;
this.mContext = mContext;
}
//刷新整個(gè)list
public void updateData(ArrayList data) {
this.mData = data;
notifyDataSetChanged();
}
//刷新局部list
public void updateDataItem(ArrayList data, int itemnm) {
this.mData = data;
notifyItemChanged(itemnm);
}
@Override
public View Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.btn.setText(mData.get(position).getName());
holder.btn.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
if(onItemClickListener != null) {
int pos = holder.getLayoutPosition();
onItemClickListener.onItemContentClick(holder.itemView, pos);
}
}
});
}
@Override
public int getItemCount() {
return mData == null ? 0 : mData.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
Button btn;
public ViewHolder(View itemView) {
super(itemView);
btn = itemView.findViewById(R.id.recycle_name);
}
}
public interface OnItemClickListener{
void onItemContentClick(View view, int position);
}
}
RecyclerItem:
public class RecyclerItem{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
activity_main:
<android.support.v7.widget.RecyclerView
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tudou.recycleviewdemo.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:paddingBottom="5dip">
</android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
recycler_item:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp">
<Button
android:id="@+id/recycle_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="No.1"/>
</RelativeLayout>
Kotlin:語(yǔ)法略有不同,recyclerview調(diào)用類似
MainActivity:
class MainActivity : AppCompatActivity(), MainAdapter.ItemClick{
val items : MutableList = ArrayList()
var mainAdapter : MainAdapter ?= null
override fun onCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//添加一個(gè)item
var item : RecyclerItem
item = RecyclerItem()
item.name = "No."+0
items.add(item)
val recyclerView = findViewById(R.id.recyclerView) as RecyclerView
recyclerView.layoutManager = GridLayoutManager(this, 3, OrientationHelper.VERTICAL, false)
mainAdapter=MainAdapter(items, this)
mainAdapter!!.setItemClickListener(this)
recyclerView.adapter = mainAdapter
recyclerView.itemAnimator = DefaultItemAnimator()
}
//adapter的按鈕點(diǎn)擊事件
override fun OnItemClick(v : View, position : Int) {
if(position == items.size - 1) {
val item = RecyclerItem()
item.name = "No." + (position + 1)
items.add(0, item)
//更新數(shù)據(jù)
mainAdapter!!.updateData(items)
}else{
Toast.makeText(this,items.get(position).name, Toast.LENGTH_SHORT).show()
}
}
}
MainAdapter:
class MainAdapter : RecyclerView.Adapter{
var items : List? = null
var context : Context ?= null
var itemClick : ItemClick ?= null
constructor(items : List, context : Context){
this.items = items
this.context = context
}
fun setItemClickListener(itemClick : ItemClick){
this.itemClick = itemClick
}
fun updateData(items : List){
this.items = items
notifyDataSetChanged()
}
override fun onBindViewHolder(holder : ViewHolder?, position : Int) {
var name=items!!.get(position).name
if(holder != null) {
holder.textName.setText(name)
holder.textName.setOnClickListener(View.OnClickListener{
if(itemClick != null) {
itemClick!!.OnItemClick(holder.itemView, position)
}
})
}
}
override fun getItemCount():Int{
return items!!.size
}
override fun onCreateViewHolder(parent : ViewGroup?, viewType : Int) : ViewHolder{
val v = LayoutInflater.from(parent!!.context).inflate(R.layout.recycler_item, parent, false) as RelativeLayout
val holder = ViewHolder(v)
return holder
}
class ViewHolder(itemView : View?) : RecyclerView.ViewHolder(itemView) {
var textName : TextView = itemView!!.findViewById(R.id.recycle_name) as TextView
}
interface ItemClick{
fun OnItemClick(v : View, position : Int);
}
}
RecyclerItem:
class RecyclerItem{
var name : String = ""
get
set
}
activity_main:
<android.support.constraint.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tudo.kotlintdemo.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:paddingBottom="5dip">
</android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
recycler_item:
<RelativeLayout>
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp">
<Button
android:id="@+id/recycle_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="No.1"/>
</RelativeLayout>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于UncategorizedSQLException異常處理方案
這篇文章主要介紹了基于UncategorizedSQLException異常處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Java進(jìn)程cpu占用過(guò)高問(wèn)題解決
這篇文章主要介紹了Java進(jìn)程cpu占用過(guò)高問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
idea自帶Jacoco/idea自動(dòng)測(cè)試語(yǔ)句覆蓋率方法(使用詳解)
這篇文章主要介紹了idea自帶Jacoco/idea自動(dòng)測(cè)試語(yǔ)句覆蓋率方法,本文給大家分享使用方法,通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
基于JAVA中使用Axis發(fā)布/調(diào)用Webservice的方法詳解
如果初識(shí)axis發(fā)布/調(diào)用WS,建議先讀上面的參考文件,本文對(duì)于發(fā)布/調(diào)用WS的主要步驟只是簡(jiǎn)單文字描述,沒有它寫的詳盡2013-05-05
MyBatisPlus的IService接口實(shí)現(xiàn)
MyBatisPlus是一個(gè)為MyBatis提供增強(qiáng)的工具,它通過(guò)IService接口簡(jiǎn)化了數(shù)據(jù)庫(kù)的CRUD操作,IService接口封裝了一系列常用的數(shù)據(jù)操作方法,本文就來(lái)介紹一下,感興趣的可以了解一下2024-10-10
spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求
這篇文章主要介紹了spring?boot通過(guò)自定義注解和AOP攔截指定的請(qǐng)求,本文主要通過(guò)切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細(xì)的說(shuō)明),需要的朋友可以參考下2024-06-06

