Android RecyclerView之ListView显示(二)
2017-03-15 14:40
204 查看
Android RecyclerView之ListView显示(二)
效果图
垂直显示(标准显示) 垂直反向显示 水平显示 水平反向显示
![](https://img-blog.csdn.net/20170315145241697?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZUZhcm1lckNYWQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170315145635685?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZUZhcm1lckNYWQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170315145707935?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZUZhcm1lckNYWQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170315145738108?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZUZhcm1lckNYWQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Android RecyclerView详解(一)
Android RecyclerView之GridView显示(三)
Android
RecyclerView之瀑布流显示(四)
Android RecyclerView之ListView显示
本博文讲述了运用RecyclerView替代ListView
在Android
RecyclerView详解(一)中已经介绍过了RecyclerView的基本运用接下来我要使用强大RecyclerView来显示ListView的效果。
1.将RecyclerView添加到布局文件并关联兼容包(注意:低版本的安卓系统,要进行兼容包的关联)
步骤:按住control+alt+shift+s出现Project
Structure按下图所示关联
![](https://img-blog.csdn.net/20170315152843949?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZUZhcm1lckNYWQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
关联成功后在主布局文件activity_main中添加RecyclerView
![](https://img-blog.csdn.net/20170315153845743?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZUZhcm1lckNYWQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.在与主类MainActivity同级下新建一个包名为menu在包中新建一个类为DateBean用于归纳信息
![](https://img-blog.csdn.net/20170315151625086?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZUZhcm1lckNYWQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.新建一个行布局名为list_item,并添加一个ImageView和TextView
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content">
<ImageView android:id="@+id/item_list_icon" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/ic_launcher"/>
<TextView android:id="@+id/item_list_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/item_list_icon" android:text="图片描述" android:textSize="28sp" android:textStyle="bold"/></RelativeLayout>
4.在res文件下新建一个包为menu在包中建一个menu布局文件用于显示下拉菜单
如果想了解详细的Menu菜单栏详细使用可以点击:Android
Menu菜单栏
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_ListView" android:orderInCategory="100" android:title="ListView显示" app:showAsAction="never">
<menu> <item android:id="@+id/action_ListView_noraml" android:orderInCategory="100" android:title="标准" app:showAsAction="never"/> <item android:id="@+id/action_ListView_vertical_reverse" android:orderInCategory="100" android:title="垂直反向" app:showAsAction="never"/> <item android:id="@+id/action_ListView_horizontal" android:orderInCategory="100" android:title="水平" app:showAsAction="never"/> <item android:id="@+id/action_ListView_horizontal_reverse" android:orderInCategory="100" android:title="水平反向" app:showAsAction="never"/> </menu> </item></menu>
5.RecyclerView适配器,
RecyclerView适配器的详细介绍可以点击:Android
RecyclerView详解(一)
package com.example.recyclerview_activity.adapter;
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;
import com.example.recyclerview_activity.R;import com.example.recyclerview_activity.menu.DateBean;
import java.util.List;
/** * Date:2017/3/14 * author:陈箫阳ChenXiaoYang * furction:RecycleView的适配器注意要指定泛型,一般我们就是类名的ViewHodler继承ViewHodler(内部已经实现了复用优化机制) */
public class RecyclerViewListAdapter extends RecyclerView.Adapter<RecyclerViewListAdapter.ListViewHolder> { private Context mContext; //泛型是RecyclerView所需的Bean类 private List<DateBean> mDateBeen;
//构造方法,一般需要接收两个参数 1.上下文 2.集合对象(包含了我们所需要的数据) public RecyclerViewListAdapter(Context context, List<DateBean> dateBeen) { mContext = context; mDateBeen = dateBeen; }
//创建VIewHolder也就是创建出来一条Item,并把viewHolder(item)返回出去 @Override public RecyclerViewListAdapter.ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个ViewHolder对象,决定了item的样式,参数1.上下文 2.XML布局资源 3.null View itemView = View.inflate(mContext, R.layout.list_item, null); //创建一个ViewHodler对象 ListViewHolder listViewHolder = new ListViewHolder(itemView); //把ViewHolder传出去 return listViewHolder; }
//当ViewHolder和数据绑定是回调 @Override public void onBindViewHolder(RecyclerViewListAdapter.ListViewHolder holder, int position) { //从集合里拿对应的item的数据对象 DateBean dateBean = mDateBeen.get(position); //给Holder里面的控件对象设置数据 holder.setData(dateBean); }
//决定RecyclerView有多少条item @Override public int getItemCount() { //数据不为null,有几条数据就显示几条数据 if (mDateBeen != null && mDateBeen.size() > 0) { return mDateBeen.size(); } return 0; }
//自动帮我们写的ViewHolder,参数:View布局对象 public class ListViewHolder extends RecyclerView.ViewHolder { private final ImageView mImageView; private final TextView mTextView;
public ListViewHolder(View itemView) { super(itemView); mImageView = (ImageView) itemView.findViewById(R.id.item_list_icon); mTextView = (TextView) itemView.findViewById(R.id.item_list_name); }
public void setData(DateBean data) { //给imageView设置图片数据 mImageView.setImageResource(data.icon); //给TextView设置文本数据 mTextView.setText(data.name); } }}
6.编写主类
package com.example.recyclerview_activity;
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;
import com.example.recyclerview_activity.adapter.RecyclerViewListAdapter;import com.example.recyclerview_activity.menu.DateBean;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerVIew; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 mRecyclerVIew = (RecyclerView) findViewById(R.id.recyclerView); } //RecyclerView填充数据,实现ListView效果 private void loadListDate(Boolean inversion, Boolean orientation) { //集合对象 ArrayList<DateBean> dateBeanArrayList = new ArrayList<>(); //给Bean类放数据,把装好数据的Bean类放到集合里 for (int i = 0; i < 20; i++) { //创建Bean类对象 DateBean dateBean = new DateBean(); //给benu类对象添加图片和信息 dateBean.icon = R.mipmap.ic_launcher; dateBean.name = "RecyclerViewList" + i; //把Bean类放入集合 dateBeanArrayList.add(dateBean); } //创建适配器adapter对象 参数有两个1.上下文 2.数据加载集合 RecyclerViewListAdapter recyclerViewadapter = new RecyclerViewListAdapter(this, dateBeanArrayList); //设置适配器 mRecyclerVIew.setAdapter(recyclerViewadapter); //布局管理器所需参数:上下文 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //通过布局管理器可以控制条目排列的顺序 true反向显示 false正常显示(默认) linearLayoutManager.setReverseLayout(inversion); //设置RecycleView显示的方向是水平还是垂直 //LinearLayoutManager.HORIZONTAL水平 LinearLayoutManager.VERTICAL默认垂直 // 三元运算符 linearLayoutManager.setOrientation(orientation ? LinearLayoutManager.VERTICAL : LinearLayoutManager.HORIZONTAL); //设置布局管理器, 参数linearLayoutManager对象 mRecyclerVIew.setLayoutManager(linearLayoutManager); } @Override public boolean onCreateOptionsMenu(Menu menu) { //加载布局使用菜单特有方法,getMenuInflate对象 //参数1.菜单显示的布局 2.固定Menu getMenuInflater().inflate(R.menu.menu_main, menu); return true; } //菜单按钮点击事件处理 @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.action_ListView_noraml) { //标准显示(垂直) loadListDate(false, true); Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show(); return true; }//List垂直反向显示 else if (itemId == R.id.action_ListView_vertical_reverse) { loadListDate(true, true); }//List水平显示 else if (itemId == R.id.action_ListView_horizontal) { loadListDate(false, false); }//List水平反向 else if (itemId == R.id.action_ListView_horizontal_reverse) { loadListDate(true, false); } return super.onOptionsItemSelected(item); }}
效果图
垂直显示(标准显示) 垂直反向显示 水平显示 水平反向显示
Android RecyclerView详解(一)
Android RecyclerView之GridView显示(三)
Android
RecyclerView之瀑布流显示(四)
Android RecyclerView之ListView显示
本博文讲述了运用RecyclerView替代ListView
在Android
RecyclerView详解(一)中已经介绍过了RecyclerView的基本运用接下来我要使用强大RecyclerView来显示ListView的效果。
1.将RecyclerView添加到布局文件并关联兼容包(注意:低版本的安卓系统,要进行兼容包的关联)
步骤:按住control+alt+shift+s出现Project
Structure按下图所示关联
关联成功后在主布局文件activity_main中添加RecyclerView
2.在与主类MainActivity同级下新建一个包名为menu在包中新建一个类为DateBean用于归纳信息
3.新建一个行布局名为list_item,并添加一个ImageView和TextView
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content">
<ImageView android:id="@+id/item_list_icon" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/ic_launcher"/>
<TextView android:id="@+id/item_list_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/item_list_icon" android:text="图片描述" android:textSize="28sp" android:textStyle="bold"/></RelativeLayout>
4.在res文件下新建一个包为menu在包中建一个menu布局文件用于显示下拉菜单
如果想了解详细的Menu菜单栏详细使用可以点击:Android
Menu菜单栏
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_ListView" android:orderInCategory="100" android:title="ListView显示" app:showAsAction="never">
<menu> <item android:id="@+id/action_ListView_noraml" android:orderInCategory="100" android:title="标准" app:showAsAction="never"/> <item android:id="@+id/action_ListView_vertical_reverse" android:orderInCategory="100" android:title="垂直反向" app:showAsAction="never"/> <item android:id="@+id/action_ListView_horizontal" android:orderInCategory="100" android:title="水平" app:showAsAction="never"/> <item android:id="@+id/action_ListView_horizontal_reverse" android:orderInCategory="100" android:title="水平反向" app:showAsAction="never"/> </menu> </item></menu>
5.RecyclerView适配器,
RecyclerView适配器的详细介绍可以点击:Android
RecyclerView详解(一)
package com.example.recyclerview_activity.adapter;
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;
import com.example.recyclerview_activity.R;import com.example.recyclerview_activity.menu.DateBean;
import java.util.List;
/** * Date:2017/3/14 * author:陈箫阳ChenXiaoYang * furction:RecycleView的适配器注意要指定泛型,一般我们就是类名的ViewHodler继承ViewHodler(内部已经实现了复用优化机制) */
public class RecyclerViewListAdapter extends RecyclerView.Adapter<RecyclerViewListAdapter.ListViewHolder> { private Context mContext; //泛型是RecyclerView所需的Bean类 private List<DateBean> mDateBeen;
//构造方法,一般需要接收两个参数 1.上下文 2.集合对象(包含了我们所需要的数据) public RecyclerViewListAdapter(Context context, List<DateBean> dateBeen) { mContext = context; mDateBeen = dateBeen; }
//创建VIewHolder也就是创建出来一条Item,并把viewHolder(item)返回出去 @Override public RecyclerViewListAdapter.ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个ViewHolder对象,决定了item的样式,参数1.上下文 2.XML布局资源 3.null View itemView = View.inflate(mContext, R.layout.list_item, null); //创建一个ViewHodler对象 ListViewHolder listViewHolder = new ListViewHolder(itemView); //把ViewHolder传出去 return listViewHolder; }
//当ViewHolder和数据绑定是回调 @Override public void onBindViewHolder(RecyclerViewListAdapter.ListViewHolder holder, int position) { //从集合里拿对应的item的数据对象 DateBean dateBean = mDateBeen.get(position); //给Holder里面的控件对象设置数据 holder.setData(dateBean); }
//决定RecyclerView有多少条item @Override public int getItemCount() { //数据不为null,有几条数据就显示几条数据 if (mDateBeen != null && mDateBeen.size() > 0) { return mDateBeen.size(); } return 0; }
//自动帮我们写的ViewHolder,参数:View布局对象 public class ListViewHolder extends RecyclerView.ViewHolder { private final ImageView mImageView; private final TextView mTextView;
public ListViewHolder(View itemView) { super(itemView); mImageView = (ImageView) itemView.findViewById(R.id.item_list_icon); mTextView = (TextView) itemView.findViewById(R.id.item_list_name); }
public void setData(DateBean data) { //给imageView设置图片数据 mImageView.setImageResource(data.icon); //给TextView设置文本数据 mTextView.setText(data.name); } }}
6.编写主类
package com.example.recyclerview_activity;
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;
import com.example.recyclerview_activity.adapter.RecyclerViewListAdapter;import com.example.recyclerview_activity.menu.DateBean;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerVIew; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 mRecyclerVIew = (RecyclerView) findViewById(R.id.recyclerView); } //RecyclerView填充数据,实现ListView效果 private void loadListDate(Boolean inversion, Boolean orientation) { //集合对象 ArrayList<DateBean> dateBeanArrayList = new ArrayList<>(); //给Bean类放数据,把装好数据的Bean类放到集合里 for (int i = 0; i < 20; i++) { //创建Bean类对象 DateBean dateBean = new DateBean(); //给benu类对象添加图片和信息 dateBean.icon = R.mipmap.ic_launcher; dateBean.name = "RecyclerViewList" + i; //把Bean类放入集合 dateBeanArrayList.add(dateBean); } //创建适配器adapter对象 参数有两个1.上下文 2.数据加载集合 RecyclerViewListAdapter recyclerViewadapter = new RecyclerViewListAdapter(this, dateBeanArrayList); //设置适配器 mRecyclerVIew.setAdapter(recyclerViewadapter); //布局管理器所需参数:上下文 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //通过布局管理器可以控制条目排列的顺序 true反向显示 false正常显示(默认) linearLayoutManager.setReverseLayout(inversion); //设置RecycleView显示的方向是水平还是垂直 //LinearLayoutManager.HORIZONTAL水平 LinearLayoutManager.VERTICAL默认垂直 // 三元运算符 linearLayoutManager.setOrientation(orientation ? LinearLayoutManager.VERTICAL : LinearLayoutManager.HORIZONTAL); //设置布局管理器, 参数linearLayoutManager对象 mRecyclerVIew.setLayoutManager(linearLayoutManager); } @Override public boolean onCreateOptionsMenu(Menu menu) { //加载布局使用菜单特有方法,getMenuInflate对象 //参数1.菜单显示的布局 2.固定Menu getMenuInflater().inflate(R.menu.menu_main, menu); return true; } //菜单按钮点击事件处理 @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.action_ListView_noraml) { //标准显示(垂直) loadListDate(false, true); Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show(); return true; }//List垂直反向显示 else if (itemId == R.id.action_ListView_vertical_reverse) { loadListDate(true, true); }//List水平显示 else if (itemId == R.id.action_ListView_horizontal) { loadListDate(false, false); }//List水平反向 else if (itemId == R.id.action_ListView_horizontal_reverse) { loadListDate(true, false); } return super.onOptionsItemSelected(item); }}
相关文章推荐
- Android添加图片到ListView或者 RecyclerView显示
- Android添加图片到ListView或者RecyclerView显示
- [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)
- android 动态显示隐藏listview的headerview和headerview里的控件
- ym—— Android 5.0学习之ListView升级版RecyclerView
- UltimateRecyclerView发布,Android下新Listview的大杀器
- [Android]使用RecyclerView替代ListView(二)
- android ListView 中的ImageView显示Drawable类型的图
- Android ListView无数据时显示其他View
- Android 5.0学习之ListView升级版RecyclerView
- Android最新组件RecyclerView,替代ListView
- [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)
- android将替代ListView的RecyclerView的使用和进阶使用,替用GallRery
- 实现自定义view(2):仿Android QQ多屏幕显示ListView的效果
- android 开发listview,gridview,scroolview之间的嵌套,出现子view显示不完整解决方法
- android之listview无数据时显示自定义view
- Android中ListView有HeaderView且overScrollMode为never,在快速滑动时,有些item没有显示
- Android最新组件RecyclerView,替代ListView
- [Android]使用RecyclerView替代ListView(一)