首页 > 开发 > Java > 正文

详解分别用Kotlin和java写RecyclerView的示例

2024-07-21 23:03:43
字体:
来源:转载
供稿:网友

本文介绍了分别用Kotlin和java写RecyclerView的示例,分享给大家,具体如下:

java:跟一般的写法一样,增加了按钮响应

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);        // 竖直方向的网格样式,每行一个Item        mLayoutManager=new GridLayoutManager(this,3,OrientationHelper.VERTICAL,false);        // 设置布局管理器        mRecyclerView.setLayoutManager(mLayoutManager);        // 设置adapter        mRecyclerView.setAdapter(mRecyclerAdapter);        // 设置Item添加和移除的动画        mRecyclerView.setItemAnimator(newDefaultItemAnimator());    }    //adapter的按钮点击事件    @Override    public void onItemContentClick(Viewview,intposition) {        //点击最后一个按钮增加一个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;  }  //刷新整个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:语法略有不同,recyclerview调用类似

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)    //添加一个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的按钮点击事件  override fun OnItemClick(v : View, position : Int) {    if(position == items.size - 1) {      val item = RecyclerItem()      item.name = "No." + (position + 1)      items.add(0, item)      //更新数据      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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到kotlin教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表