RecyclerView使用Dome

来源:互联网 发布:高收益网络理财平台 编辑:程序博客网 时间:2024/05/20 07:50

很好理解,套用即可

import com.example.recyclerview.SimpleAdapter.OnItemClickListener;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {    private RecyclerView mRecyclerView;    private List<String> mDatas;    private SimpleAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initDatas();        initView();        mAdapter=new SimpleAdapter(this, mDatas);        mRecyclerView.setAdapter(mAdapter);        //>>>>>>设置垂直布局         》》  布局管理        LinearLayoutManager llm=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);        mRecyclerView.setLayoutManager(llm);        // >>添加item分界线      //  mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));        //设置动画,当添加数据,删除数据时会有动画效果        mRecyclerView.setItemAnimator(new DefaultItemAnimator());        //接口回调        mAdapter.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemLongClick(View view, int position) {                // TODO Auto-generated method stub                Toast.makeText(MainActivity.this, "Long click:"+position, Toast.LENGTH_SHORT).show();            }            @Override            public void onItemClick(View view, int position) {                // TODO Auto-generated method stub                Toast.makeText(MainActivity.this, "click:"+position, Toast.LENGTH_SHORT).show();            }        });    }    private void initView() {        // TODO Auto-generated method stub        mRecyclerView=(RecyclerView) findViewById(R.id.id_recycleView);    }    private void initDatas() {        // TODO Auto-generated method stub        mDatas=new ArrayList<String>();        for(int i='A';i<='z';i++){            //int类型转化为char            mDatas.add(""+(char)i);        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        switch(id){        case R.id.action_gridView:            //垂直网格布局            mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3 ));            break;        case R.id.hor_gridView:            //水平网格布局            mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL));            break;        case R.id.action_listView:            //listview             mRecyclerView.setLayoutManager(new LinearLayoutManager(this));            break;        case R.id.action_puBuLiu:            //瀑布流            Intent intent=new Intent(this,PuBuLiuActivity.class);            startActivity(intent);            break;        case R.id.action_add:            mAdapter.addDatas(1);            break;        case R.id.action_delect:            mAdapter.deleteData(1);            break;        }        return super.onOptionsItemSelected(item);    }}

SimpleAdapter

import java.util.List;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.RecyclerView.ViewHolder;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnLongClickListener;import android.view.ViewGroup;import android.widget.TextView;public class SimpleAdapter extends RecyclerView.Adapter<MyViewHolder> {    private LayoutInflater mInflater;    private Context context;    protected List<String> mDatas;    //定义一个监听事件接口,拱外部调用    回调    public interface OnItemClickListener{        void onItemClick(View view,int position);        void onItemLongClick(View view,int position);    }    private OnItemClickListener mOnItemClickListener;    //供外部调用此方法,进行回调接口    public void setOnItemClickListener(OnItemClickListener listener){        this.mOnItemClickListener=listener;    }    public SimpleAdapter(Context context,List<String> datas) {        this.context=context;        this.mDatas=datas;        mInflater=LayoutInflater.from(context);    }    @Override    public int getItemCount() {        // TODO Auto-generated method stub        return mDatas.size();    }    @Override    public void onBindViewHolder(final MyViewHolder holder, final int position) {        // TODO Auto-generated method stub        holder.tv.setText(mDatas.get(position));//调用事件》》当点击时,再被系统监听,调用定义的事件方法,传递给外部也调用了接口的Activity,故Activity可做出响应        setUpItemEvent(holder);    }    protected void setUpItemEvent(final MyViewHolder holder) {        if(mOnItemClickListener!=null){            holder.itemView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    // TODO Auto-generated method stub                    //传入布局中的位置                    int LayoutPosition=holder.getLayoutPosition();                    mOnItemClickListener.onItemClick(holder.itemView, LayoutPosition);                }            });            holder.itemView.setOnLongClickListener(new OnLongClickListener() {                @Override                public boolean onLongClick(View v) {                    int LayoutPosition=holder.getLayoutPosition();                    mOnItemClickListener.onItemLongClick(holder.itemView, LayoutPosition);                    return false;                }            });        }    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {        // TODO Auto-generated method stub        View view =mInflater.inflate(R.layout.item_main, arg0, false);        MyViewHolder ViewHolder=new MyViewHolder(view);        return ViewHolder;    }//添加数据的方法public void addDatas(int position){    mDatas.add(position,"insert One");    //不是notifyDataSetChanged()    notifyItemInserted(position);}   //删除数据的方法public void deleteData(int position){    mDatas.remove(position);    notifyItemRemoved(position);}}class MyViewHolder extends ViewHolder{    TextView tv;    public MyViewHolder(View arg0) {        super(arg0);        tv=(TextView) arg0.findViewById(R.id.id_tv);    }}

PuBuLiuActivity

import java.util.ArrayList;import java.util.List;import com.example.recyclerview.SimpleAdapter.OnItemClickListener;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.support.v7.widget.StaggeredGridLayoutManager;import android.view.Menu;import android.view.MenuItem;import android.view.View;public class PuBuLiuActivity extends Activity {    private RecyclerView mRecyclerView;    private List<String> mDatas;    private PuBuLiuAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initDatas();        initView();        mAdapter=new PuBuLiuAdapter(this, mDatas);        mRecyclerView.setAdapter(mAdapter);        //>>>>>>设置垂直布局         》》  布局管理       // LinearLayoutManager llm=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);       // mRecyclerView.setLayoutManager(llm);        // >>添加item分界线      //  mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));        //瀑布流布局        mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));        //监听事件        mAdapter.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemLongClick(View view, int position) {                // 长按删除                mAdapter.deleteData(position);            }            @Override            public void onItemClick(View view, int position) {                //             }        });    }    private void initView() {        // TODO Auto-generated method stub        mRecyclerView=(RecyclerView) findViewById(R.id.id_recycleView);    }    private void initDatas() {        // TODO Auto-generated method stub        mDatas=new ArrayList<String>();        for(int i='A';i<='z';i++){            //int类型转化为char            mDatas.add(""+(char)i);        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        switch(id){        }        return super.onOptionsItemSelected(item);    }}

PuBuLiuAdapter

import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.ViewGroup.LayoutParams;public class PuBuLiuAdapter extends SimpleAdapter {    //瀑布流高度    private List<Integer> mHeight;    public PuBuLiuAdapter(Context context,List<String> datas) {        //调用父类,所以很多东西可以删去,父类有的,子类可以删掉。        //也就有了接口事件的能力,有点击监听了        super(context,datas);        mHeight=new ArrayList<Integer>();        for(int i=0;i<mDatas.size();i++){            mHeight.add((int) (100+Math.random()*300));        }    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        // TODO Auto-generated method stub        //设置瀑布流高度        LayoutParams lp=(LayoutParams) holder.itemView.getLayoutParams();        lp.height=mHeight.get(position);        holder.itemView.setLayoutParams(lp);        holder.tv.setText(mDatas.get(position));        setUpItemEvent(holder);    }}
import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Rect;import android.graphics.drawable.Drawable;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.View;/** * This class is from the v7 samples of the Android SDK. It's not by me! * <p/> * See the license above for details. */public class DividerItemDecoration extends RecyclerView.ItemDecoration{    private static final int[] ATTRS = new int[] { android.R.attr.listDivider };    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;    private Drawable mDivider;    private int mOrientation;    public DividerItemDecoration(Context context, int orientation)    {        final TypedArray a = context.obtainStyledAttributes(ATTRS);        mDivider = a.getDrawable(0);        a.recycle();        setOrientation(orientation);    }    public void setOrientation(int orientation)    {        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST)        {            throw new IllegalArgumentException("invalid orientation");        }        mOrientation = orientation;    }    @Override    public void onDraw(Canvas c, RecyclerView parent)    {        Log.v("recyclerview - itemdecoration", "onDraw()");         if (mOrientation == VERTICAL_LIST) {                drawVertical(c, parent);            } else {                drawHorizontal(c, parent);            }    }    public void drawVertical(Canvas c, RecyclerView parent)    {        final int left = parent.getPaddingLeft();        final int right = parent.getWidth() - parent.getPaddingRight();        final int childCount = parent.getChildCount();        for (int i = 0; i < childCount; i++)        {            final View child = parent.getChildAt(i);            android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(                    parent.getContext());            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int top = child.getBottom() + params.bottomMargin;            final int bottom = top + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    public void drawHorizontal(Canvas c, RecyclerView parent)    {        final int top = parent.getPaddingTop();        final int bottom = parent.getHeight() - parent.getPaddingBottom();        final int childCount = parent.getChildCount();        for (int i = 0; i < childCount; i++)        {            final View child = parent.getChildAt(i);            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int left = child.getRight() + params.rightMargin;            final int right = left + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    @Override    public void getItemOffsets(Rect outRect, int itemPosition,            RecyclerView parent)    {        if (mOrientation == VERTICAL_LIST)        {            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());        } else        {            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);        }    }}
0 0