当然我们提提他的兄弟ListView,这位大哥在android中UI的地位也是举足轻重,几乎存在于你的任何APP上,新闻,淘宝,。。。。。等等,但是ListView也存在大量的不足,性能差,扩展性不好,如果想要实现横向滚动,我也不知道能不能实现,反正没看过别人实现过,以前横向滚动有个Gallery去实现,不过在今天这种已经不需要了,我们可以通过RecyclerView实现横向滚动以及竖向滚动,当然我们还可以实现更加复杂的布局,不哔哔了,直接开始吧
先写子布局,新建sub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
2.新建目标对象
package com.example.fang.myapplication;
/**
* Created by fang on 2017/11/12.
*/
public class LayoutList {
int Image;
String text;
public LayoutList(int image, String text) {
Image = image;
this.text = text;
}
public int getImage() {
return Image;
}
public void setImage(int image) {
Image = image;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
实现适配器
package com.example.fang.myapplication;
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.TextView;
import java.util.List;
/**
* Created by fang on 2017/11/11.
*/
public class MyViewAdapter extends RecyclerView.Adapter {
List list;
public MyViewAdapter(List list) {
this.list = list;
}
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
TextView textView;
public MyViewHolder(View itemView) {
super(itemView);
imageView= (ImageView) itemView.findViewById(R.id.imageView);
textView= (TextView) itemView.findViewById(R.id.textView);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//这里我们发现需要绑定一个RecyclerView.ViewHolder,那么我们只能实现它
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.sub_layout,parent,false);
MyViewHolder myViewHolder=new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//在这里我们进行数据的绑定工作
LayoutList layoutList= (LayoutList) list.get(position);
((MyViewHolder)holder).textView.setText(layoutList.getText());
((MyViewHolder)holder).imageView.setImageResource(layoutList.getImage());
}
@Override
public int getItemCount() {
return list.size();
}
}
修改主布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.fang.myapplication.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/RecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
,最后一步,java主程序
package com.example.fang.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
List list;
RecyclerView recyclerView;
MyViewAdapter myViewAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initinal();
recyclerView= (RecyclerView) findViewById(R.id.RecyclerView);
LinearLayoutManager linear=new LinearLayoutManager(this);
//在这里我们实现的是布局的管理
recyclerView.setLayoutManager(linear);
recyclerView.setAdapter(myViewAdapter);
}
private void initinal() {
list=new ArrayList();
list.add(new LayoutList(R.drawable.one,"暂停"));
list.add(new LayoutList(R.drawable.two,"添加"));
list.add(new LayoutList(R.drawable.three,"上一步"));
list.add(new LayoutList(R.drawable.four,"停止"));
list.add(new LayoutList(R.drawable.five,"播放"));
myViewAdapter=new MyViewAdapter(list);
}
}
欧了,在这里我们顺便说一下,LayoutManager用于指定RecyclerView的布局方式,上面我们用的是线性布局。当然RecyclerView也为我们提供了GridLayoutManager和staggeredGridLayoutManager这两种内置的布局排列方式,前者实现的是网格布局,后者实现的是瀑布流,