RecyclerView 使用的简单封装
来源:互联网 发布:淘宝宝贝排名查询软件 编辑:程序博客网 时间:2024/06/06 00:30
本 Demo 主要是对网络请求分页加载数据做的一个简易的封装,实现了如下功能:
1,RecyclerView 滑动到底部时加载下一页
2,ItemView 和它内部View的点击事件
3,Item 的选中
效果如下:
使用方法:
1,继承 BaseNetFragment
2,实现 onLoadingData(int pageIndex),getRecyclerItemView() 等方法
3,Item 的点击事件在 onItemClick(int position, Object data) 方法中实现
4,Item 内面 View 的点击事件在 onItemContentClick(View view, int position) 方法中实现,并且 ItemView 实现 ItemClick 接口
5,单选调用 recyclerAdapter.setSingleSelected(position) 方法,并且 ItemView 实现 ItemSelect 接口
代码如下:
public class MusicListFragment extends BaseNetFragment { @Override protected void initData() { super.initData(); loadFirstPage(); } @Override public void onLoadingData(final int pageIndex) { new Handler().postDelayed(new Runnable() { @Override public void run() { mPageBean.isLoading = false; List newList = SimulationData.getPageData(pageIndex); onLoadSuccess(newList, pageIndex, SimulationData.getTotalPageCount()); } }, 2000); } @Override protected int getLayoutId() { return R.layout.fragment_base_audio_net; } @Override public View getRecyclerItemView() { return new MusicItemView(getContext()); } @Override public void onItemClick(int position, Object data) { super.onItemClick(position, data); Toast.makeText(getContext(), "播放 " + ((Music) adapterDatas.get(position)).getAudioName(), Toast.LENGTH_SHORT).show(); recyclerAdapter.setSingleSelected(position); } @Override public void onItemContentClick(View view, int position) { super.onItemContentClick(view, position); if (view.getId() == R.id.iv_chip_opt) { Music music = (Music) adapterDatas.get(position); if (!MusicDao.getInstance().exist(music.getMusicId())) { MusicDao.getInstance().add(music.getMusicId()); Toast.makeText(getContext(), "下载 " + music.getAudioName(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getContext(), "已下载 " + music.getAudioName(), Toast.LENGTH_SHORT).show(); } } }}
ItemView 的实现:
public class MusicItemView extends BaseView implements ItemRender<IMusicItemViewRender>, ItemClick, ItemSelect { private View viewPlayTag; private ImageView ivMainImage; private TextView tvTitle, tvDescription; private ImageView ivOpt; private ItemClickListener itemClickListener; private int clickPosition; private MusicDao musicDao; public MusicItemView(Context context) { super(context); } public MusicItemView(Context context, AttributeSet attrs) { super(context, attrs); } public MusicItemView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected int getLayoutId() { return R.layout.item_view_music_common; } @Override protected void initView() { musicDao = MusicDao.getInstance(); viewPlayTag = findViewById(R.id.view_play_tag); ivMainImage = (ImageView) findViewById(R.id.iv_main_image); tvTitle = (TextView) findViewById(R.id.tv_chip_title); tvDescription = (TextView) findViewById(R.id.tv_chip_description); ivOpt = (ImageView) findViewById(R.id.iv_chip_opt); } @Override protected void initData() { } @Override protected void initListener() { ivOpt.setOnClickListener(this); } @Override public void onClick(View view) { super.onClick(view); switch (view.getId()){ case R.id.iv_chip_opt: if (itemClickListener != null){ ivOpt.setImageResource(R.mipmap.btn_music_download_checked); itemClickListener.onItemContentClick(view, clickPosition); } break; } } @Override public void renderItem(int position, IMusicItemViewRender data) { isNotEmptySetText(tvTitle, data.getItemTitle()); isNotEmptySetText(tvDescription, data.getItemDescription()); isNotEmptyLoadImageView(ivMainImage, data.getItemImagePath()); boolean isDownloaded = musicDao.exist(data.getItemDownloadMusicId()); if (isDownloaded) { ivOpt.setImageResource(R.mipmap.btn_music_download_checked); } else { ivOpt.setImageResource(R.mipmap.btn_music_download_normal); } } @Override public void setItemClick(ItemClickListener itemClickListener, int position) { this.itemClickListener = itemClickListener; this.clickPosition = position; } @Override public void onSelected(int position) { viewPlayTag.setVisibility(View.VISIBLE); } @Override public void onUnselected(int position) { viewPlayTag.setVisibility(View.INVISIBLE); }}
此 Demo 是对分页加载中的一个提炼,让代码变得简介清晰,同时提高开发效率。由于开发时间比较紧,代码的封装有很多不足的地方,望大家见谅。同时希望大家提出建议和改善的办法,让我们共同维护这个项目。
GitHub 地址: https://github.com/iOnesmile/SimpleRecyclerView
0 0
- RecyclerView 使用的简单封装
- RecyclerView 的简单封装
- recyclerView的简单封装
- Recyclerview Adapter 的简单封装
- RecyclerView.Adapter 的简单封装
- 简单封装RecyclerView的Adapter
- 对recyclerview的简单封装
- 对RecyclerView的封装,使用简单,功能丰富
- RecyclerView的使用和封装
- RecyclerView的简单使用
- RecyclerView 的简单使用
- recyclerview的简单使用
- Recyclerview的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- TCP客户/服务器程序交互过程图解
- vim选择文件中所有内容
- win10系统中tomcat注册成Windows服务失败
- 大数定律与中心极限定理
- 面向对象和面向过程
- RecyclerView 使用的简单封装
- Hive 性能调优
- Error inflating class fragment
- 转换PHP脚本成为windows的执行程序
- python的collections模块
- Apache Httpd的安装和配置
- js判断对象是否存在的三种方法
- 批处理删除空文件夹-
- WEBRTC 音频从采集到网络发送