Android RecyclerView简单运用

来源:互联网 发布:wifi怎么绑定mac地址 编辑:程序博客网 时间:2024/05/16 19:05

什么是RecyclerView?个人理解,它是一个在数据量大的时候,为了显示在界面上提供的灵活高效处理的控件。可以替代listview,gallery,gridview等控件。( 这个是复制的,可以忽略。。。)

因为这个是在android 在2014 的goole io大会说的,所以呢整个sdk 最起码更新到 21版本吧。

这样才有android-support-v7-recyclerview.jar  这个包。

看下项目结构

下面就简单的上代码了

activity_main.xml

<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.ngh.recucler.MainActivity" >    <android.support.v7.widget.RecyclerView        android:id="@+id/recycle"        android:layout_width="match_parent"        android:layout_height="match_parent" /></RelativeLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ImageView        android:id="@+id/iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="10dp"        android:src="@drawable/ic_launcher" />    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_marginRight="10dp" /></RelativeLayout>

MainActivity.java

package com.ngh.recucler;import java.util.ArrayList;import com.ngh.recucler.adapter.RecyleAdapter;import com.ngh.recucler.adapter.RecyleAdapter.OnRecyclerViewItemClickListener;import android.app.Activity;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.RecyclerView.OnItemTouchListener;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;/** * 测试界面 *  * @author ngh * *         2015年5月23日 */public class MainActivity extends Activity {private RecyclerView recycle;private RecyleAdapter adapter;private ArrayList<String> list = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recycle = (RecyclerView) findViewById(R.id.recycle);LinearLayoutManager manager = new LinearLayoutManager(this);manager.setOrientation(LinearLayoutManager.VERTICAL); // 横滑,还是竖滑recycle.setLayoutManager(manager); // 设置布局管理器initData();adapter = new RecyleAdapter(list, this);recycle.setAdapter(adapter);/* 设置单个item 的点击事件 */adapter.setListener(new OnRecyclerViewItemClickListener() {@Overridepublic void onClick(View view, int position) {Toast.makeText(getBaseContext(), list.get(position), 0).show();}});/** * 绘制listView 的间隔线 */recycle.addItemDecoration(new RecyclerView.ItemDecoration() {Paint paint = new Paint();@Overridepublic void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDraw(c, parent, state);}@Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);paint.setColor(Color.LTGRAY);for (int i = 0, size = parent.getChildCount(); i < size; i++) {View child = parent.getChildAt(i);c.drawLine(child.getLeft(), child.getBottom(), child.getRight(), child.getBottom(), paint);}}});// 可以提高效率recycle.setHasFixedSize(true);}/** * 添加测试数据 */private void initData() {for (int i = 0; i < 1000; i++) {list.add("这是测是数据。。。" + i);}}}

RecyleAdapter.java

package com.ngh.recucler.adapter;import java.util.ArrayList;import com.ngh.recucler.R;import com.ngh.recucler.R.drawable;import com.ngh.recucler.R.id;import com.ngh.recucler.R.layout;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;/** * RecyclerView 的适配Adapter * @author ngh * * 2015年5月23日 */public class RecyleAdapter extends RecyclerView.Adapter<RecyleAdapter.ViewHolder> {private ArrayList<String> list;private Context context;public RecyleAdapter(ArrayList<String> list, Context context) {super();this.list = list;this.context = context;}// 点击监听事件  此处必须设置public  后期考虑到分包的问题public interface OnRecyclerViewItemClickListener {void onClick(View view, int position);};private OnRecyclerViewItemClickListener listener;// 设置监听器public void setListener(OnRecyclerViewItemClickListener listener) {this.listener = listener;}@Overridepublic int getItemCount() {// TODO Auto-generated method stubreturn list.size();}/** * 数据展示 */@Overridepublic void onBindViewHolder(final ViewHolder viewHolder, final int i) {// TODO Auto-generated method stubviewHolder.tv.setText(list.get(i));/*item  的点击事件创建*/viewHolder.itemView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if(listener!=null){ listener.onClick(viewHolder.itemView, i);}}});}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {// TODO Auto-generated method stubView view = LinearLayout.inflate(context, R.layout.list_item, null);ViewHolder viewHolder = new ViewHolder(view);return viewHolder;}class ViewHolder extends RecyclerView.ViewHolder {private ImageView iv;private TextView tv;public ViewHolder(View itemView) {super(itemView);iv = (ImageView) itemView.findViewById(R.id.iv);tv = (TextView) itemView.findViewById(R.id.tv);}}}

效果图:(图片不好,将就看吧)

0 0
原创粉丝点击