从android元年2009年至今,我们已经走过了7年的光辉历程。android平台为人类智能时代的推进作出了巨大贡献,其平台庞大丰富的开发控件使我们在app开发过程中其乐无穷。但是,随着社会的发展,人类需求的不断升级增多,系统的控件自诞生就存在的缺陷和不足满满显现出来了,例如最常见的ListView,GridView或者瀑布流(以下简称‘三剑客’)通畅作为app页面列表最佳展示方式的控件使用起来模式固定,条目的大小设置,大数据展示时的计算速度,内存的占用和拓展的灵活性都是不足之处,那么今天给大家介绍一个google推荐的新控件-RecylerView !RecylerView封装在”com.android.support:recyclerview-v7”中,使用方式和传统的‘三剑客’类似,先创建adapter,然后将adapter设置给控件,不同的是recylerview的adapter自己单独封装了,将条目view的创建逻辑和数据操作逻辑分离开来,正所谓‘MVC’的集中体现!好,下面我们就来介绍它的使用方法:
首先要在build.gradle中倒入资源库:
compile 'com.android.support:recyclerview-v7:23.1.0'
然后开始使用:
1.布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<!--线性布局和瀑布流时orientation设置为"vertical";网格布局时orientation设置为"horizontal"-->
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view_test_rv"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:orientation = "vertical"
android:layout_height="match_parent"
android:background="#bbccaa" />
</LinearLayout>
2.主activity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Singleton singleton = Singleton.instance;
String content = singleton.toString();
List<Person> personList = new ArrayList<Person>();
for (int i = 0; i < 180; i++) {
Person p1 = new Person();
p1.setAge(10);
p1.setName(content);
personList.add(p1);
}
//
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view_test_rv);
recyclerView.setHasFixedSize(true);
//线性布局
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
//VERTICAL竖向列表 ;HORIZONTAL横向列表;
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
//网格布局,10表示每行的列数
// GridLayoutManager gridlayoutManger = new GridLayoutManager(this, 10);
// recyclerView.setLayoutManager(gridlayoutManger);
//瀑布流,3表示每行的列数
// StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
// recyclerView.setLayoutManager(staggeredGridLayoutManager);
PersonAdapter adapter = new PersonAdapter(personList);
adapter.setOnRecyclerViewListener(new PersonAdapter.OnRecyclerViewListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, "this is " + position, Toast.LENGTH_SHORT).show();
}
@Override
public boolean onItemLongClick(int position) {
return false;
}
});
recyclerView.setAdapter(adapter);
}
}
Singleton类
enum Singleton {
instance;
@Override
public String toString() {
return "recylerview---111";
}
}
person类:
public class Person {
private String name;
private int age;
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
3.RecylerView的adapter
public class PersonAdapter extends RecyclerView.Adapter {
public interface OnRecyclerViewListener {
void onItemClick(int position);
boolean onItemLongClick(int position);
}
private OnRecyclerViewListener onRecyclerViewListener;
public void setOnRecyclerViewListener(OnRecyclerViewListener onRecyclerViewListener) {
this.onRecyclerViewListener = onRecyclerViewListener;
}
private List<Person> list;
public PersonAdapter(List<Person> list) {
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_view_test_item_person, null);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(lp);
return new PersonViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
PersonViewHolder holder = (PersonViewHolder) viewHolder;
Person person = list.get(i);
holder.nameTv.setText(person.getName());
holder.ageTv.setText(person.getAge() + "岁");
}
@Override
public int getItemCount() {
return list.size();
}
class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
public View rootView;
public TextView nameTv;
public TextView ageTv;
public PersonViewHolder(View itemView) {
super(itemView);
nameTv = (TextView) itemView.findViewById(R.id.recycler_view_test_item_person_name_tv);
ageTv = (TextView) itemView.findViewById(R.id.recycler_view_test_item_person_age_tv);
rootView = itemView.findViewById(R.id.recycler_view_test_item_person_view);
rootView.setOnClickListener(this);
rootView.setOnLongClickListener(this);
rootView.setLayoutParams(new LinearLayout.LayoutParams(200, 200));
}
@Override
public void onClick(View v) {
if (null != onRecyclerViewListener) {
onRecyclerViewListener.onItemClick(getPosition());
}
}
@Override
public boolean onLongClick(View v) {
if (null != onRecyclerViewListener) {
return onRecyclerViewListener.onItemLongClick(getPosition());
}
return false;
}
}
}
4.adapter的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recycler_view_test_item_person_view"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:background="#aabbcc">
<TextView
android:id="@+id/recycler_view_test_item_person_name_tv"
android:layout_width="50dp"
android:layout_height="50dp"
android:textSize="18sp"
android:background="#ccbbaa" />
<TextView
android:id="@+id/recycler_view_test_item_person_age_tv"
android:layout_width="50dp"
android:layout_height="50dp"
android:paddingLeft="5dp"
android:background="#aaccbb"
android:textSize="15sp" />
</LinearLayout>