概述
RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法
项目示例截图:
1、首先找到RecyclerView的一个jar包,这个jar包要和你的sdk版本尽量是一致的,要不然有可能会出现找不到资源的错误,jar包路径在
..sdkextrasandroidsupportv7recyclerviewlibs(sdk安装路径下的文件夹)
找到jar包之后可以直接拷贝到项目的libs文件下,然后就可以使用RecyclerView了
2、创建布局文件,示例中的布局文件只放置了一个RecyclerView,代码如下
(注意:要使用<android.support.v7.widget.RecyclerView>声明)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.recyclerviewdemo.MainActivity" >
<<span style="color:#ff6666;">android.support.v7.widget.RecyclerView</span>
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
3、为RecyclerView的每一个item设置一个布局,这里就简单的使用一个TextView来充当item,内容设置为wrap_content
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffcc00"
android:layout_margin="5dp"
tools:context="com.example.recyclerviewdemo.MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="TextView" />
</RelativeLayout>
4、为RecyclerView设置一个Adapter来实现数据和视图的一个绑定
(RecyclerView的adapter需要继承RecyclerView.Adapter<MyViewholder>这里的MyViewholder是重写的一个Viewholder,RecyclerView的adapter必须结合Viewholder来使用,这对布局的优化起了很大的作用)
RecyclerView的adapter主要有两个方法和一个Viewholder类组成
a、onCreateViewHolder方法,主要是实现把布局文件实例化出来,然后放进我们的Viewholder内部类中进行控件的实例化
public MyViewholder onCreateViewHolder(ViewGroup arg0, int arg1) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.item, arg0, false);
MyViewholder myViewholder = new MyViewholder(view);
return myViewholder;
}
b、onBindViewHolder方法,主要是将数据和我们的控件绑定在一起,实现数据绑定
public void onBindViewHolder(final MyViewholder arg0, int arg1) {
// TODO Auto-generated method stub
arg0.textView.setText(list.get(arg1));
}
c、ViewHolder内部类,这里我们重写了一个MyViewholder内部类,继承了Viewholder,实现控件的实例化
class MyViewholder extends ViewHolder {
TextView textView;
public MyViewholder(View arg0) {
super(arg0);
textView = (TextView) arg0.findViewById(R.id.textView1);
}
}
通过上面几个方法的完成,我们就可以将数据通过构造方法传入adapter中,实现数据和视图的绑定
5、在MainActivity中,我们需要实例化我们的adapter和RecyclerView
控件的实例化和平时一样,主要讲一下RecyclerView和listveiw等不同的点,RecyclerView主要是通过LayoutManager来进行管理的,通过LayoutManager来实现不同的样式,下面我们来分别介绍一下,通过RecyclerView来实现listview和gridview和瀑布流三种样式
a、实现listview功能
通过使用LinearLayoutManager我们可以实现listveiw的样式
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
这里是设置了一个垂直方向的listview
b、通过使用GridLayoutManager我们可以实现GridView样式
recyclerView.setLayoutManager(new GridLayoutManager(this, 3,GridLayoutManager.HORIZONTAL, false));
上面参数表示了分3列显示数据,方向为水平方向
c、通过使用StaggeredGridLayoutManager我们可以实现瀑布流样式
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
通过上面简单的设置我们就可以实现不同的显示样式,方法非常简单
6、上面已经介绍了比较核心的使用代码,下面把项目的源码发布一下
6.1 MainActivity代码
public class MainActivity extends ActionBarActivity {
private RecyclerView recyclerView;
private List<String> lists;
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
//
private void initView() {
// TODO Auto-generated method stub
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setAdapter(mAdapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(
getApplicationContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
//此处是为了添加一个分隔线
// recyclerView.addItemDecoration(new DividerItemDecoration(
// getApplicationContext(), DividerItemDecoration.VERTICAL_LIST));
}
private void initData() {
// TODO Auto-generated method stub
lists = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
lists.add("ggggggggggggggggffffffffffffffggggggggggggggggffffffffffffffggggggggggggggggfffffffffffffffffffffffffkkkkk"
+ i);
} else {
lists.add("gggggggggggggggg" + i);
}
}
mAdapter = new MyAdapter(getApplicationContext(), lists);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.listview:
recyclerView.setLayoutManager(new LinearLayoutManager(this,
LinearLayoutManager.VERTICAL, false));
break;
case R.id.gridview:
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
break;
case R.id.horizengridview:
recyclerView.setLayoutManager(new GridLayoutManager(this, 2,
GridLayoutManager.HORIZONTAL, false));
break;
case R.id.pubuliu:
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,
StaggeredGridLayoutManager.VERTICAL));
break;
case R.id.add:
mAdapter.add(1);
break;
case R.id.delete:
mAdapter.delete(1);
break;
}
return true;
}
}
6.2 MyAdapter代码
public class MyAdapter extends RecyclerView.Adapter<MyViewholder> {
private LayoutInflater inflater;
private Context context;
private List<String> list;
public MyAdapter(Context context, List<String> list) {
// TODO Auto-generated constructor stub
this.context = context;
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public int getItemCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public void onBindViewHolder(final MyViewholder arg0, int arg1) {
// TODO Auto-generated method stub
arg0.textView.setText(list.get(arg1));
}
@Override
public MyViewholder onCreateViewHolder(ViewGroup arg0, int arg1) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.item, arg0, false);
MyViewholder myViewholder = new MyViewholder(view);
return myViewholder;
}
public void add(int pos) {
list.add(pos, "插入新的");
this.notifyItemInserted(pos);
}
public void delete(int pos) {
list.remove(pos);
this.notifyItemRemoved(pos);
}
}
class MyViewholder extends ViewHolder {
TextView textView;
public MyViewholder(View arg0) {
super(arg0);
// TODO Auto-generated constructor stub
textView = (TextView) arg0.findViewById(R.id.textView1);
}
}
7、注意:本示例,RecyclerView无法响应单击事件,下个博文会介绍怎么给RecyclerView添加单击响应事件,请查看下一个博文
最后
以上就是喜悦煎蛋为你收集整理的RecyclerView的使用方法和瀑布流的实现RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法 项目示例截图:的全部内容,希望文章能够帮你解决RecyclerView的使用方法和瀑布流的实现RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法 项目示例截图:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复