RecycleView与ListView和GridView类似,我觉得像两者的统一,使用方式大体类似,不过RecycleView 将Adapter 中的ViewHolder进行了规范化,同时还可以对列表数据进行布局设置。我参考做了一个demo,效果如下:
1、添加库 'com.android.support:recyclerview-v7:23.0.0'
2、xml文件
<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:orientation="vertical" tools:context="com.example.hornsey.myapplication.Demo.RecycleViewDemo"> <RadioGroup android:id="@+id/radioGroup" android:gravity="center" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <RadioButton android:id="@+id/linear_layout_rb" android:text="Linear Layout Manager" android:checked="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <RadioButton android:id="@+id/grid_layout_rb" android:text="Grid Layout Manager" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> </RadioGroup> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
3、自定义适配器,先创建ViewHolder,需继承自RecycleView.ViewHolder,然后覆盖相关方法。
package com.example.hornsey.myapplication.Demo; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; /** * Created by hornsey on 2015/12/22. */ public class RAdapter extends RecyclerView.Adapter<RAdapter.ViewHolder> { private String[] mData; public RAdapter(String[] data) { super(); mData = data; } public static class ViewHolder extends RecyclerView.ViewHolder{ public TextView mTextView; public ViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView; } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(parent.getContext(), android.R.layout.simple_list_item_1, null); // 创建一个ViewHolder ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mData[position]); } @Override public int getItemCount() { return mData.length; } }
4、主文件实现。初始化一个刚刚定义adapter,给RecycleView设置adapter即可。RecycleView可以通过setLayoutManager 设置布局方式。
package com.example.hornsey.myapplication.Demo; import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import com.example.hornsey.myapplication.R; public class RecycleViewDemo extends Activity implements View.OnClickListener { private static final String TAG = "RecycleViewDemo"; protected RecyclerView mRecyclerView; private RecyclerView.LayoutManager gridLayoutManager; private RecyclerView.LayoutManager linearLayoutManager ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycle_view_demo); String[] data = new String[50]; for(int i = 0; i < data.length; i++){ data[i] = "data" + i; } findViewById(R.id.linear_layout_rb).setOnClickListener(this); findViewById(R.id.grid_layout_rb).setOnClickListener(this); mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); linearLayoutManager = new LinearLayoutManager(this); gridLayoutManager = new GridLayoutManager(this, 4); RAdapter adapter = new RAdapter(data); mRecyclerView.setAdapter(adapter); mRecyclerView.setLayoutManager(linearLayoutManager); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.linear_layout_rb: mRecyclerView.setLayoutManager(linearLayoutManager); break; case R.id.grid_layout_rb: mRecyclerView.setLayoutManager(gridLayoutManager); break; default: mRecyclerView.setLayoutManager(linearLayoutManager); break; } } }