Android MVVM架构怎么实现RecyclerView列表
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容主要讲解"Android MVVM架构怎么实现RecyclerView列表",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android MVVM架
千家信息网最后更新 2025年01月31日Android MVVM架构怎么实现RecyclerView列表
本篇内容主要讲解"Android MVVM架构怎么实现RecyclerView列表",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android MVVM架构怎么实现RecyclerView列表"吧!
效果图
导入引用
导入Recyclerview依赖
implementation 'androidx.recyclerview:recyclerview:1.1.0'
导入dataBinding引用
dataBinding { enabled = true }
代码解析
建立实体类
继承被观察者模式BaseObservable
@Bindable绑定字段
刷新数据 notifyPropertyChanged( BR.mName );//BR自动生成
public class Information extends BaseObservable { public String mName; public String mSex; public String mAge; public ListinformationList; public Information(){ } public Information(String mName,String mSex,String mAge){ this.mName = mName; this.mSex = mSex; this.mAge = mAge; } @Bindable public String getmAge() { return mAge; } @Bindable public String getmName() { return mName; } @Bindable public String getmSex() { return mSex; } /** * @param mName*/ public void setmName(String mName) { this.mName = mName; notifyPropertyChanged( BR.mName ); } @Bindable public List getInformationList() { return informationList; } /** * @param mSex */ public void setmSex(String mSex) { this.mSex = mSex; notifyPropertyChanged( BR.mSex ); } /** * @param mAge */ public void setmAge(String mAge) { this.mAge = mAge; notifyPropertyChanged( BR.mAge ); } /** * @param informationList */ public void setInformationList(List informationList) { this.informationList = informationList; notifyPropertyChanged( BR.informationList ); }}
将视图层与数据层绑定
@{information.mName}
建立RecyclerView子项
导入实体类
适配器
建立适配器
引入数据源
public MyRecyclerView(ListinformationList){ this.informationList = informationList; }
插入布局文件
@NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { ViewDataBinding binding = DataBindingUtil.inflate( LayoutInflater.from( parent.getContext()) , R.layout.recyclerview_item,parent,false); return new ViewHolder( binding,mOnItemClickListener ); }
设置数据
@Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Information information = informationList.get( position ); holder.binding.setVariable( BR.information,informationList.get( position )); holder.binding.executePendingBindings(); }
自定义ViewHolder类
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ ViewDataBinding binding = null; OnItemClickListener listener; public ViewHolder(@NonNull ViewDataBinding binding,OnItemClickListener listener) { super( binding.getRoot() ); this.listener = listener; this.binding = binding; binding.getRoot().setOnClickListener( this ); } public ViewDataBinding getBinding(){ return binding; }
设置子项点击事件
定义接口
public interface OnItemClickListener { void onItemClick(View view, int position); }
继承View.OnClickListener点击事件
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
获取接口实例
public ViewHolder(@NonNull ViewDataBinding binding,OnItemClickListener listener)
调用接口
@Override public void onClick(View v) { if (listener != null){ listener.onItemClick( v,getPosition() ); } }
开放接口
public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; }
adapter全部代码
public class MyRecyclerView extends RecyclerView.Adapter{ private List informationList; private OnItemClickListener mOnItemClickListener; public MyRecyclerView(List informationList){ this.informationList = informationList; } public interface OnItemClickListener { void onItemClick(View view, int position); } public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { ViewDataBinding binding = DataBindingUtil.inflate( LayoutInflater.from( parent.getContext()) , R.layout.recyclerview_item,parent,false); return new ViewHolder( binding,mOnItemClickListener ); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Information information = informationList.get( position ); holder.binding.setVariable( BR.information,informationList.get( position )); holder.binding.executePendingBindings(); } @Override public int getItemCount() { return informationList.size(); } class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ ViewDataBinding binding = null; OnItemClickListener listener; public ViewHolder(@NonNull ViewDataBinding binding,OnItemClickListener listener) { super( binding.getRoot() ); this.listener = listener; this.binding = binding; binding.getRoot().setOnClickListener( this ); } public ViewDataBinding getBinding(){ return binding; } @Override public void onClick(View v) { if (listener != null){ listener.onItemClick( v,getPosition() ); } } }}
建立VM层
子项点击事件的使用
实现OnItemClickListener接口
@Override public void InitListener(){ adapter.setOnItemClickListener( new MyRecyclerView.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText( context,"位数:"+position,Toast.LENGTH_SHORT ).show(); } } ); }
VM层代码
public class ViewModel implements IViewModel{ public Information information; public ListmList = new ArrayList<>( ); private RecyclerView recyclerView; private Context context; private MyRecyclerView adapter; public ViewModel(Information information, RecyclerView recyclerView, Context context){ this.information = information; this.recyclerView = recyclerView; this.context = context; InitRecyclerView(); InitData(); InitListener(); } private void InitRecyclerView(){ recyclerView.setLayoutManager( new LinearLayoutManager( context ) ); adapter = new MyRecyclerView( mList ); recyclerView.setAdapter( adapter ); } @Override public void InitData() { for (int i = 0; i < 10; i++) { mList.add( new Information( "张三"+i,"男",i+"" ) ); Log.d( "TAG",mList.get( i ).mName+"" ); } information.setInformationList( mList ); } @Override public void InitListener(){ adapter.setOnItemClickListener( new MyRecyclerView.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText( context,"位数:"+position,Toast.LENGTH_SHORT ).show(); } } ); }}
数据与视图交互
public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); binding = DataBindingUtil.setContentView( this,R.layout.activity_main ); binding.setViewmodel( new ViewModel(new Information( ),binding.myRecyclerView,MainActivity.this) ); }}
到此,相信大家对"Android MVVM架构怎么实现RecyclerView列表"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
接口
数据
架构
事件
代码
子项
位数
内容
实体
视图
适配器
学习
适配
实用
更深
兴趣
字段
实例
实用性
实际
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全法网络体系逐渐完善
抖音软件开发难度
网络安全行业采访
浦东新区常见软件开发设备
延庆区正规软件开发操作
怎样理解数据库中数据的冗余
geo数据库如何做预后分析
如何生成云服务器
数据库安全框架分为
图数据库常用
土壤墒情软件开发
数据库应用基础期末考试试题
网络安全生态
数据库中一列内容如何分类
互联网创业团队平安科技
用来软件开发戴尔笔记本
毕业答辩计算机网络技术
数据库项目登录页面
网络安全视频mp4
长沙天心区软件开发学院
数据库 natural
重庆专业软件开发怎么样
数据库窗体的数据源
网络安全综合治理部署情况
2019软件开发服务费税率
window如何开启代理服务器
腾讯的网络安全部门
深圳 软件开发发票 退税
网络安全隐患及防护手段
h5专业软件开发多少钱