Android 5.x新增控件之-RecylcerView实现ListView/GridView
来源:互联网 发布:Win10网络图标显示红叉 编辑:程序博客网 时间:2024/06/08 04:27
1.效果图
2.RecyclerView实现ListView垂直列表的步骤
RecyclerView是ListView和GridView的代替者.
RecyclerView有一套自己的回收规则,不再需要自己手动写代码去回收.
RecyclerView有一套自己的回收规则,不再需要自己手动写代码去回收.
1.库导入
:compile 'com.android.support:recyclerview-v7:24.2.1'(改成自己的版本)
2.xml中加入RecyclerView控件
<android.support.v7.widget.RecyclerView android:id="@+id/recylerView" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>
3.Activity代码
package com.xzy.testrecylerview001;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.widget.Toast;import com.xzy.testrecylerview001.adapter.ListAdapter;public class VerticalListActivity extends AppCompatActivity { private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_vertical_list); mRecyclerView = findViewById(R.id.recylerView); initData(); } private void initData() { LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(layoutManager); //测试数据 int[] imgRes = new int[100]; for (int i = 0; i < imgRes.length; i++) { imgRes[i] = R.mipmap.ic_launcher; } ListAdapter listAdapter = new ListAdapter(this, true, imgRes); mRecyclerView.setAdapter(listAdapter); listAdapter.setOnItemClickListener(new ListAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(VerticalListActivity.this, "" + position, Toast.LENGTH_SHORT).show(); } }); } public static void startActivity(Activity activity) { Intent intent = new Intent(activity, VerticalListActivity.class); activity.startActivity(intent); }}
4.Adapter适配器
package com.xzy.testrecylerview001.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.xzy.testrecylerview001.R;/** * Function:RecyclerView适配器 * Created by xuzhuyun on 2017/11/16. */public class ListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context mContext; private boolean isVertical; private int[] imgResId; private OnItemClickListener mOnItemClickListener; public interface OnItemClickListener { void onItemClick(int position); } public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) { this.mOnItemClickListener = mOnItemClickListener; } public ListAdapter(Context mContext, boolean isVertical, int[] imgResId) { this.mContext = mContext; this.isVertical = isVertical; this.imgResId = imgResId; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(isVertical ? R.layout.item_list_v : R.layout.item_list_h, parent, false); return new RecyclerHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((RecyclerHolder) holder).setData(position); } public class RecyclerHolder extends RecyclerView.ViewHolder implements View.OnClickListener { LinearLayout mLinearLayout; ImageView mImageView; TextView mTextView; public RecyclerHolder(View itemView) { super(itemView); mLinearLayout = itemView.findViewById(R.id.item_layout); mImageView = itemView.findViewById(R.id.item_img); mTextView = itemView.findViewById(R.id.item_txt); mLinearLayout.setOnClickListener(this); } @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(getLayoutPosition()); } } public void setData(int position) { mImageView.setImageResource(imgResId[position]); mTextView.setText(isVertical ? "RecyclerView实现list垂直列表" : "RecyclerView实现list水平列表"); } } @Override public int getItemCount() { return imgResId == null ? 0 : imgResId.length; }}
3.RecyclerView实现ListView水平列表步骤
效果图
1.Activity代码
package com.xzy.testrecylerview001;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.widget.Toast;import com.xzy.testrecylerview001.adapter.ListAdapter;public class HorizontalListActivity extends AppCompatActivity { private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_horizontal_list); mRecyclerView = findViewById(R.id.recylerView); initData(); } private void initData() { LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//设置水平 mRecyclerView.setLayoutManager(layoutManager); //测试数据 int[] imgRes = new int[100]; for (int i = 0; i < imgRes.length; i++) { imgRes[i] = R.mipmap.ic_launcher; } ListAdapter listAdapter = new ListAdapter(this, false, imgRes); mRecyclerView.setAdapter(listAdapter); listAdapter.setOnItemClickListener(new ListAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(HorizontalListActivity.this, "" + position, Toast.LENGTH_SHORT).show(); } }); } public static void startActivity(Activity activity) { Intent intent = new Intent(activity, HorizontalListActivity.class); activity.startActivity(intent); }}
2.Adapter代码
适配器代码同2中的适配器代码一模一样。因为这里公用一个adapter,所以添加了isVertical参数,判断是垂直列表还是水平列表。
4.RecyclerView实现垂直GridView效果和水平GridView效果
效果图
库导入和xml文件和步骤2一样,不再赘述。
1.Activity代码
package com.xzy.testrecylerview001;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.widget.Toast;import com.xzy.testrecylerview001.adapter.GridAdapter;public class VerticalGridActivity extends AppCompatActivity { private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_vertical_grid); initView(); initData(); } private void initView() { mRecyclerView = findViewById(R.id.recylerView); } private void initData() { int[] imgRes = new int[100]; for (int i = 0; i < imgRes.length; i++) { imgRes[i] = R.mipmap.ic_launcher; } GridLayoutManager layoutManager = new GridLayoutManager(this, 4); //实现垂直GridView则设置为LinearLayoutManager.VERTICAL //实现水平GridView则设置为LinearLayoutManager.HORIZONTAL layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); mRecyclerView.setLayoutManager(layoutManager); GridAdapter gridAdapter = new GridAdapter(this, true, imgRes); mRecyclerView.setAdapter(gridAdapter); gridAdapter.setOnItemClickListener(new GridAdapter.OnItemClickListener() { @Override public void onItemClickListener(int position) { Toast.makeText(VerticalGridActivity.this, "" + position, Toast.LENGTH_SHORT).show(); } }); } public static void startActivity(Activity activity) { Intent intent = new Intent(activity, VerticalGridActivity.class); activity.startActivity(intent); }}
2.Adapter代码
package com.xzy.testrecylerview001.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.xzy.testrecylerview001.R;/** * Function: * Created by xuzhuyun on 2017/11/17. */public class GridAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context mContext; private int[] imgRes; private boolean isVertical; private OnItemClickListener mOnItemClickListener; public GridAdapter(Context mContext, boolean isVertical, int[] imgRes) { this.mContext = mContext; this.isVertical = isVertical; this.imgRes = imgRes; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //iew view = LayoutInflater.from(mContext).inflate(isVertical ? R.layout.item_list_v : R.layout.item_list_h, parent, false); View view = LayoutInflater.from(mContext).inflate(R.layout.item_list_h, parent, false); return new RecyclerHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((RecyclerHolder) holder).setData(position); } private class RecyclerHolder extends RecyclerView.ViewHolder implements View.OnClickListener { LinearLayout mLinearLayout; ImageView mImageView; TextView mTextView; public RecyclerHolder(View itemView) { super(itemView); mLinearLayout = itemView.findViewById(R.id.item_layout); mImageView = itemView.findViewById(R.id.item_img); mTextView = itemView.findViewById(R.id.item_txt); mLinearLayout.setOnClickListener(this); } @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClickListener(getLayoutPosition()); } } public void setData(int position) { mImageView.setImageResource(imgRes[position]); mTextView.setText("" + position); } } public void setOnItemClickListener(OnItemClickListener mOnItemClickLisntener) { this.mOnItemClickListener = mOnItemClickLisntener; } @Override public int getItemCount() { return imgRes == null ? 0 : imgRes.length; } public interface OnItemClickListener { void onItemClickListener(int position); }}
5.总结
使用RecyclerView实现ListView或GridView,关键在于给RecyclerView绑定的布局管理器是LinearLayoutManager还是GridLayoutManager;是水平的还是垂直的,取决于方法
layoutManager.setOrientation(int);
点击事件通过接口的方式来实现,也很容易。
本文参考
原文: http://blog.csdn.net/Rozol/article/details/50225593
微博: http://weibo.com/u/2524456400
在此感谢原作者文章。
阅读全文
0 0
- Android 5.x新增控件之-RecylcerView实现ListView/GridView
- Android 5.x新增控件之-RecylcerView实现瀑布流
- Android 5.x新增控件之-CardView
- Android 5.x新增控件之-Snackbar控件
- Android 5.x新增控件之-Toolbar控件
- Android 5.x新增控件之-FloatingActionButton控件
- Android 5.x新增控件之-TextInputLayout控件
- Android 5.x新增控件之--TabLayout实现左右滑动导航菜单
- 控件之 Dialog ListView GridView
- Android 控件之GridView
- Android 控件之GridView
- Android控件之GridView
- Android控件之GridView
- android控件之GridView
- Android控件之GridView
- RecylcerView的autofit实现
- Android之ListView和GridView
- ListView、GridView等控件实现刷新
- 嵌入式Linux内存管理的一些知识点总结
- VS2013中Image Watch插件的使用(OpenCV)
- 注意 @DateTimeFormat 和@JsonFormat 使用场景的不同
- MySQL 5.6 for Windows 解压缩版配置安装
- html基础
- Android 5.x新增控件之-RecylcerView实现ListView/GridView
- 数据结构上机——栈
- 关键字:strictfp
- 关于js校验,检验常见的比如:电话,数字,邮箱,手机号等等
- JQuery 对 Select option 的操作
- Android组合开发
- 日常笔记
- 【SE】这也许是最完美的项目文档框架-Siemens
- 长短连接学习笔记