主要是分两部分
首先一部分是一个Activity里,负责初始化UI控件,准备数据Datas
package com.example.sjy.recycleview; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Menu; import android.view.MenuItem; import java.util.ArrayList; import java.util.List; /** * Created by sjy_1993 on 2017/2/28. */ public class MainActivity extends ActionBarActivity { private RecyclerView mRecycleView; private List<String> mDatas; private SimpleAdapter mAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDatas(); initViews(); //进行adapter的设置 Context,数据 mAdapter = new SimpleAdapter(mDatas, this); mRecycleView.setAdapter(mAdapter); //设置布局 mRecycleView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); //设置添加删除动画 mRecycleView.setItemAnimator(new DefaultItemAnimator()); //设置分割线 mRecycleView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); } private void initDatas() { mDatas = new ArrayList<>(); for (int i = 'A'; i < 'z'; i++) { mDatas.add("" + (char) i);//为什么前面加“” } } private void initViews() { //绑定视图 mRecycleView = (RecyclerView) findViewById(R.id.recyclerview); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.pubuView: //瀑布流就是每个item不一样这里是进入瀑布流界面 Intent intent = new Intent(MainActivity.this,StaggeredGridActivity.class); startActivity(intent); break; case R.id.gridView: //3列相册布局 mRecycleView.setLayoutManager(new GridLayoutManager(this, 3)); break; case R.id.lineView: //仿照ListView mRecycleView.setLayoutManager(new LinearLayoutManager(this)); break; case R.id.action_add: addData(1); break; case R.id.action_delete: deleteData(1); break; } return super.onOptionsItemSelected(item); } }Activity的布局文件如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </LinearLayout>
这里是item的布局界面
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#55ff0000" android:layout_width="match_parent" android:layout_margin="3dp" android:layout_height="72dp"> <TextView android:id="@+id/text_num" android:gravity="center" android:background="@drawable/item_bg" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
这里是Adapter界面
package com.example.sjy.recycleview; 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.ViewGroup; import android.widget.TextView; import java.util.List; /** * Created by sjy_1993 on 2017/2/28. */ public class SimpleAdapter extends RecyclerView.Adapter<MyViewHolder>{ private LayoutInflater mInflater; //inflate item的布局 private List<String> mDatas; private Context mContext; 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(List<String> datas, Context context ) { this.mDatas = datas; this.mContext = context; mInflater = LayoutInflater.from(context); } //实现未实现的方法 @Override public int getItemCount() { return mDatas.size(); } //绑定ViewHolder里的数据 @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { //绑定数据显示在item里 holder.tv.setText(mDatas.get(position)); //设置监听事件 回调 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mOnItemClickListener.onItemClick(holder.itemView,position); } }); //longClick holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { mOnItemClickListener.onItemLongClick(holder.itemView,position); return false; } }); } //创建一个VIewHolder @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //得到上一层的View View view = mInflater.inflate(R.layout.simple_item,parent,false); //内容提供者 MyViewHolder viewHolder = new MyViewHolder(view); // 得到上一层的View里 return viewHolder; } public void addData(int pos){ mDatas.add("Insert one"); notifyItemChanged(pos); } public void deleteData(int pos) { mDatas.remove(pos); notifyItemRemoved(pos); } } //自己写的ViewHolder class MyViewHolder extends ViewHolder{ //当前Item所有的控件 TextView tv; //arg0 相当于rootView public MyViewHolder(View arg0){ super(arg0); //进行View的初始化 tv = (TextView) arg0.findViewById(R.id.text_num); } }
添加删除,增加动画
在标题栏上设置,此时在menu -main.xml菜单里设置
<item android:id="@+id/action_delete" android:orderInCategory="100" android:title="Delete" android:icon="@drawable/ic_menu_delete" app:showAsAction="ifRoom" /> <item android:id="@+id/action_add" android:orderInCategory="100" android:title="Add" android:icon="@drawable/ic_menu_add" app:showAsAction="ifRoom" /> <!--把图标显示在ActionBar上面
如果要设置监听的话,要自己写监听的内部类文件见上方SimpleAdapter里。最后要在主文件里写上如下监听代码
//设置监听 mAdapter.setOnItemClickListener(new SimpleAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this,"您点击的位置是"+position,Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { Toast.makeText(MainActivity.this,"您点击的位置是"+position,Toast.LENGTH_SHORT).show(); } }); }