reference material
1.Android RecyclerView uses full resolution to experience artistic controls
http://blog.csdn.net/lmj623565791/article/details/45059587
2.RecyclerViewItemAnimators
https://github.com/gabrielemariotti/RecyclerViewItemAnimators
Explain
Recently, I was working on projects for other departments, and found that they used the RecyclerView control, so I followed to see what this control is.
When I refer to Hongyang's blog (reference 1) and use the RecyclerView control step by step, I find that this control is indeed very powerful. RecyclerView is a collection of the advantages of listview and GridView. It is more convenient for users to switch between them. In addition, it also increases the display mode of waterfall StaggerView and the effect of animation. When you know her, you will fall in love with her.
My Demo
Step 1: add dependencies to the build.gradle file
compile "com.android.support:recyclerview-v7:23.1.1"
Step 2: implement a simple interface such as listview:
Layout file activity test recycler view.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_test_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="android.com.debugdemo.TestRecyclerView.TestRecyclerView">
<Button
android:id="@+id/switchButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="switch recycler type"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/id_recyclerview"
android:layout_below="@id/switchButton"
android:divider="#ffff0000"
android:dividerHeight="2dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Define adapter HomeAdapter:
import android.com.debugdemo.R;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
import android.content.Context;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
{
private List<String> mDatas;
private LayoutInflater mInflater;
public interface OnItemClickLitener
{
void onItemClick(View view, int position);
void onItemLongClick(View view , int position);
}
private OnItemClickLitener mOnItemClickLitener;
public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
{
this.mOnItemClickLitener = mOnItemClickLitener;
}
public HomeAdapter(Context context, List<String> datas)
{
mInflater = LayoutInflater.from(context);
mDatas = datas;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
MyViewHolder holder = new MyViewHolder(mInflater.inflate(
R.layout.item_home, parent, false));
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position)
{
holder.tv.setText(mDatas.get(position));
// If callback is set, click event is set
if (mOnItemClickLitener != null)
{
holder.itemView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
int pos = holder.getLayoutPosition();
mOnItemClickLitener.onItemClick(holder.itemView, pos);
}
});
holder.itemView.setOnLongClickListener(new OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
int pos = holder.getLayoutPosition();
mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
removeData(pos);
return false;
}
});
}
}
@Override
public int getItemCount()
{
return mDatas.size();
}
public void addData(int position)
{
mDatas.add(position, "Insert One");
notifyItemInserted(position);
}
public void removeData(int position)
{
mDatas.remove(position);
notifyItemRemoved(position);
}
class MyViewHolder extends ViewHolder
{
TextView tv;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
}
}
}
Item's layout file item'home.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:background="#44ff0000">
<TextView
android:id="@+id/id_num"
android:layout_width="100dp"
android:layout_height="100dp"
android:gravity="center"
android:layout_gravity="center"
android:text="1" />
</FrameLayout>
Then initialize the display:
private RecyclerView mRecyclerView;
private List<String> mDatas;
private HomeAdapter mHomeAdapter;
..................
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mHomeAdapter = new HomeAdapter(TestRecyclerView.this,mDatas);
mRecyclerView.setAdapter(mHomeAdapter);
The effect is as follows: