特性:
1.android5.0以后出现的新控件,5.0以下需加入兼容包
android.support.v7.widget.RecyclerView
2.可代替listView,不用优化。
3.展示效果众多。
4.需添加
LinearLayoutManager,否则展示效果不出现!
tips:须在原生虚拟机中运行,才能显示菜单栏
流程:
1.ctrl+shift+alt+s添加兼容包
2.在xml中添加控件
3.为了方便效果显示,加载菜单布局,再res文件夹下新建menu文件夹,并添加xml布局
4.在mainactivity中添加代码:
//
菜单,方便各种效果的显示
@Override
//加载一个菜单布局
public boolean onCreateOptionsMenu(Menu menu) {
// 加载布局,使用菜单特有的方法 getMEnuInflater, 或 inflate 对象,参数一 : 菜单显示布局, 2. 固定 menu
getMenuInflater().inflate(R.menu. menu_main, menu);
return true;
// 加载布局,使用菜单特有的方法 getMEnuInflater, 或 inflate 对象,参数一 : 菜单显示布局, 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_list_noraml) {
// 标准显示
loatlistdata( false, false);
Toast. makeText( this, " 标准显示 ", Toast. LENGTH_SHORT).show();
} else if (itemid == R.id. action_list_horizontal) {
loatlistdata( false, true);
} else if (itemid == R.id. action_list_vertical_reverse) {
loatlistdata( true, false);
} else if (itemid == R.id. action_list_horizontal_reverse) {
loatlistdata( true, true);
}
public boolean onOptionsItemSelected(MenuItem item) {
int itemid = item.getItemId();
if (itemid == R.id. action_list_noraml) {
// 标准显示
loatlistdata( false, false);
Toast. makeText( this, " 标准显示 ", Toast. LENGTH_SHORT).show();
} else if (itemid == R.id. action_list_horizontal) {
loatlistdata( false, true);
} else if (itemid == R.id. action_list_vertical_reverse) {
loatlistdata( true, false);
} else if (itemid == R.id. action_list_horizontal_reverse) {
loatlistdata( true, true);
}
return true;
}
5.RecycleView控件初始化,封装RecycleView数据。
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycleView);
}
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycleView);
}
//recycleView填充数据 参数1,方便控制条目的顺序,参数2:控制RecycleView方向
private void loatgridedata(boolean b, boolean b1) {
//集合对象
ArrayList<DataBean> datas = new ArrayList<>();
//给bean类放数据,最后把装好的bean类放到集合中
for (int i = 0; i < 35; i++) {
//对bean类进行实例化,这样可以进行调用。
DataBean dataBean = new DataBean();
dataBean.icon = android.R.mipmap.sym_def_app_icon;
dataBean.name = "阿三" + i;
datas.add(dataBean);
}
//集合对象
ArrayList<DataBean> datas = new ArrayList<>();
//给bean类放数据,最后把装好的bean类放到集合中
for (int i = 0; i < 35; i++) {
//对bean类进行实例化,这样可以进行调用。
DataBean dataBean = new DataBean();
dataBean.icon = android.R.mipmap.sym_def_app_icon;
dataBean.name = "阿三" + i;
datas.add(dataBean);
}
}
6.添加RecycleView的适配器Adapter(RecycleViewAdapter全部代码),注意要指定泛型 一般是类名的ViewHolder继承ViewHolder(内部已实现复用优化机制)
package com.zhiyuan3g.administrator.recycleviewtest.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.zhiyuan3g.administrator.recycleviewtest.DataBean;
import com.zhiyuan3g.administrator.recycleviewtest.R;
import java.util.List;
/**
* Created by Administrator on 2017.3.13.
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.zhiyuan3g.administrator.recycleviewtest.DataBean;
import com.zhiyuan3g.administrator.recycleviewtest.R;
import java.util.List;
/**
* Created by Administrator on 2017.3.13.
*/
//Recycleview,注意制定泛型,一般我们就是类名。ViewHolder继承ViewHolder
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ListViewHoulder> {
private Context context;
//泛型是指RecycleView所需的bean类
private List<DataBean> dataBean;
public RecycleAdapter(Context context, List<DataBean> dataBean) {
this.context = context;
this.dataBean = dataBean;
}
@Override
// 创建ViewHolder,并返回
public ListViewHoulder onCreateViewHolder(ViewGroup parent, int viewType) {
//转换一个ViewHolder布局,决定item的样子,参数1,上下文,自定义布局,为null
View view = View.inflate(this.context, R.layout.activity_item, null);
//创建ViewHolder对象
ListViewHoulder viewHoulder = new ListViewHoulder(view);
return viewHoulder;
}
//当Viewhoulder和数据绑定时调用
@Override
public void onBindViewHolder(ListViewHoulder holder, int position) {
//从集合里拿到对应item的集合
DataBean dataBean = this.dataBean.get(position);
// 给houlder里面的控件对象设置数据
holder.setdata(dataBean);
}
@Override
public int getItemCount() {
//数据不为空
if (this.dataBean!=null&&dataBean.size()>0){
return dataBean.size();
}
return 0;
}
public class ListViewHoulder extends RecyclerView.ViewHolder {
private final ImageView imageView;
private final TextView textView;
public ListViewHoulder(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.imageView);
textView= (TextView) itemView.findViewById(R.id.textView);
}
public void setdata(DataBean data) {
imageView.setImageResource(data.icon);
textView.setText(data.name);
}
private Context context;
//泛型是指RecycleView所需的bean类
private List<DataBean> dataBean;
public RecycleAdapter(Context context, List<DataBean> dataBean) {
this.context = context;
this.dataBean = dataBean;
}
@Override
// 创建ViewHolder,并返回
public ListViewHoulder onCreateViewHolder(ViewGroup parent, int viewType) {
//转换一个ViewHolder布局,决定item的样子,参数1,上下文,自定义布局,为null
View view = View.inflate(this.context, R.layout.activity_item, null);
//创建ViewHolder对象
ListViewHoulder viewHoulder = new ListViewHoulder(view);
return viewHoulder;
}
//当Viewhoulder和数据绑定时调用
@Override
public void onBindViewHolder(ListViewHoulder holder, int position) {
//从集合里拿到对应item的集合
DataBean dataBean = this.dataBean.get(position);
// 给houlder里面的控件对象设置数据
holder.setdata(dataBean);
}
@Override
public int getItemCount() {
//数据不为空
if (this.dataBean!=null&&dataBean.size()>0){
return dataBean.size();
}
return 0;
}
public class ListViewHoulder extends RecyclerView.ViewHolder {
private final ImageView imageView;
private final TextView textView;
public ListViewHoulder(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.imageView);
textView= (TextView) itemView.findViewById(R.id.textView);
}
public void setdata(DataBean data) {
imageView.setImageResource(data.icon);
textView.setText(data.name);
}
}
}
7.在Mainactivity中添加适配器,和布局管理器linearlayoutManager
RecycleAdapter adapter =
new RecycleAdapter(
this, datas);
recyclerView.setAdapter(adapter);
// 布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager( this);
// 通过布局管理器可以管理条目顺序, true 反向, false 正常显示 ( 默认 )
linearLayoutManager.setReverseLayout(vertation);
// 设置 hrecycleView 方向水平或垂直(默认)
linearLayoutManager.setOrientation(orientation ? LinearLayoutManager. HORIZONTAL : LinearLayoutManager. VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
}
recyclerView.setAdapter(adapter);
// 布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager( this);
// 通过布局管理器可以管理条目顺序, true 反向, false 正常显示 ( 默认 )
linearLayoutManager.setReverseLayout(vertation);
// 设置 hrecycleView 方向水平或垂直(默认)
linearLayoutManager.setOrientation(orientation ? LinearLayoutManager. HORIZONTAL : LinearLayoutManager. VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
}
8.文件目录
9.mainactivity全部代码
package com.zhiyuan3g.administrator.recycleviewtest;
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.zhiyuan3g.administrator.recycleviewtest.adapter.RecycleAdapter;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
recyclerView = (RecyclerView) findViewById(R.id. recycleView);
}
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.zhiyuan3g.administrator.recycleviewtest.adapter.RecycleAdapter;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
recyclerView = (RecyclerView) findViewById(R.id. recycleView);
}
private void loatlistdata( boolean vertation, boolean orientation) {
// 集合对象
ArrayList<DataBean> datas = new ArrayList<>();
// 给 bean 类放数据,最后把装好的 bean 类放到集合中
for ( int i = 0; i < 35; i++) {
// 对 bean 类进行实例化,这样可以进行调用。
DataBean dataBean = new DataBean();
// 系统自带图片
dataBean. icon = android.R.mipmap. sym_def_app_icon;
dataBean. name = " 阿三 " + i;
datas.add(dataBean);
}
System. out.println( datas);
RecycleAdapter adapter = new RecycleAdapter( this, datas);
recyclerView.setAdapter(adapter);
// 布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager( this);
// 通过布局管理器可以管理条目顺序, true 反向, false 正常显示 ( 默认 )
linearLayoutManager.setReverseLayout(vertation);
// 设置 hrecycleView 方向水平或垂直(默认)
linearLayoutManager.setOrientation(orientation ? LinearLayoutManager. HORIZONTAL : LinearLayoutManager. VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
}
// 菜单,方便各种效果的显示
@Override
// 菜单添加布局
public boolean onCreateOptionsMenu(Menu menu) {
// 加载布局,使用菜单特有的方法 getMEnuInflater, 或 inflate 对象,参数一 : 菜单显示布局, 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_list_noraml) {
// 标准显示
loatlistdata( false, false);
Toast. makeText( this, " 标准显示 ", Toast. LENGTH_SHORT).show();
} else if (itemid == R.id. action_list_horizontal) {
loatlistdata( false, true);
} else if (itemid == R.id. action_list_vertical_reverse) {
loatlistdata( true, false);
} else if (itemid == R.id. action_list_horizontal_reverse) {
loatlistdata( true, true);
}
}