MainActivity
package cc.testrecyclerview1;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import java.util.ArrayList;
/**
*
* 原創(chuàng)作者:
* 谷哥的小弟
*
* 博客地址:
* http://blog.csdn.net/lfdfhl
*
* Demo描述:
* RecyclerView入門
*
* RecyclerView常用的三種LayoutManager
*
* 1 GridLayoutManager:實現(xiàn)類似于GridView的效果
* 2 LinearLayoutManager:實現(xiàn)類似于ListView的效果
* 3 StaggeredGridLayoutManager:類似于實現(xiàn)瀑布流的效果
*
*/
public class MainActivity extends AppCompatActivity {
private Context mContext;
private RecyclerView mRecyclerView;
private RecyclerViewAdapter mRecyclerViewAdapter;
private RecyclerViewItemTouchListener mRecyclerViewItemTouchListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
mContext=this;
mRecyclerView= (RecyclerView) findViewById(R.id.recyclerView);
ArrayList<String> list=new ArrayList<String>();
for (int i=0;i<20;i++){
list.add("item "+i);
}
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(mContext);
GridLayoutManager gridLayoutManager=new GridLayoutManager(mContext,3,GridLayoutManager.VERTICAL,false);
mRecyclerView.setLayoutManager(linearLayoutManager);
//mRecyclerView.setLayoutManager(gridLayoutManager);
mRecyclerViewAdapter=new RecyclerViewAdapter(mContext,list);
mRecyclerView.setAdapter(mRecyclerViewAdapter);
mRecyclerViewItemTouchListener =new RecyclerViewItemTouchListener(mContext, mRecyclerView, new RecyclerViewItemTouchListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(mContext,"單擊 "+position,Toast.LENGTH_SHORT).show();
mRecyclerViewAdapter.changeData(position);
}
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText(mContext,"長按 "+position,Toast.LENGTH_SHORT).show();
mRecyclerViewAdapter.addData(position);
}
});
mRecyclerView.addOnItemTouchListener(mRecyclerViewItemTouchListener);
}
}
RecyclerViewAdapter
package cc.testrecyclerview1;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter{
private Context context;
private List<String> dataList;
public RecyclerViewAdapter(Context context,List<String> dataList){
this.context=context;
this.dataList=dataList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView= LayoutInflater.from(context).inflate(R.layout.recyclerview_item,parent,false);
ViewHolder viewHolder=new ViewHolder(itemView);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder viewHolder= (ViewHolder) holder;
viewHolder.textView.setText(dataList.get(position));
}
@Override
public int getItemCount() {
if (null!=dataList){
return dataList.size();
}else {
return 0;
}
}
//移除數(shù)據(jù)
public void removeData(int position) {
dataList.remove(position);
notifyItemRemoved(position);
}
//新增數(shù)據(jù)
public void addData(int position){
dataList.add(position,"add data "+position);
notifyItemInserted(position);
}
//更改數(shù)據(jù)
public void changeData(int position){
dataList.set(position,"change data "+ position);
notifyItemChanged(position);
}
private class ViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView= (TextView) itemView.findViewById(R.id.textView);
}
}
}
RecyclerViewItemTouchListener
package cc.testrecyclerview1;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import static cc.testrecyclerview1.R.id.recyclerView;
public class RecyclerViewItemTouchListener implements RecyclerView.OnItemTouchListener{
private Context context;
private RecyclerView recyclerView;
private GestureDetector gestureDetector;
private GestureListenerImpl gestureListenerImpl;
private OnItemClickListener clickListener;
public interface OnItemClickListener{
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
}
public RecyclerViewItemTouchListener(Context context, RecyclerView recyclerView, OnItemClickListener clickListener){
this.context=context;
this.clickListener=clickListener;
this.recyclerView=recyclerView;
gestureListenerImpl=new GestureListenerImpl();
gestureDetector=new GestureDetector(context, gestureListenerImpl);
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
return gestureDetector.onTouchEvent(e);
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
private class GestureListenerImpl implements GestureDetector.OnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
View itemView = recyclerView.findChildViewUnder(e.getX(), e.getY());
int position = recyclerView.getChildLayoutPosition(itemView);
if (null != itemView && null != clickListener) {
clickListener.onItemClick(itemView, position);
return true;
}
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
View itemView = recyclerView.findChildViewUnder(e.getX(), e.getY());
int position = recyclerView.getChildLayoutPosition(itemView);
if (null != itemView && null != clickListener) {
clickListener.onItemLongClick(itemView, position);
}
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
}
}