RecyclerView实现条目展示 增加删除 3种管理器
RecyclerView实现条目展示 增加删除 3种管理器
一:布局管理器有三种:
- LinearLayoutManager 现行管理器,支持横向、纵向。
- GridLayoutManager 网格布局管理器
- StaggeredGridLayoutManager 瀑布就式布局管理器
二:ItemDecoration 下划线效果
在使用RecyclerView 的时候有三种东西是可以自己定义的 响应事件 分割线 动画效果
mRecyclerView = findView(R.id.id_recyclerview);
//设置布局管理器 layout可以设置方向
//mRecyclerView.setLayoutManager(layout);
//设置布局管理器 layout可以设置方向
//mRecyclerView.setLayoutManager(layout);
mRecyclerView.setLayoutManager(new
GridLayoutManager(this,4));
//设置adapter
mRecyclerView.setAdapter(adapter)
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration( getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
//设置adapter
mRecyclerView.setAdapter(adapter)
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration( getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
三:开始代码逻辑:
1:添加依赖
compile 'com.android.support:recyclerview-v7:26.0.+'
2:布局
<LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btn1" android:text="添加" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn2" android:text="删除" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn3" android:text="list" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn4" android:text="grid" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn5" android:text="flow" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
3. MainActivity类
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.support.v7.widget.StaggeredGridLayoutManager; import android.view.View; import android.widget.Button; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener { RecyclerView recyclerView; private Button btn1; private Button btn2; private Button btn3; private Button btn4; private Button btn5; private RecyclerView recyclerview; List<String>list; MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 initView(); //初始化数据 initData(); //创建Adapter对象 adapter = new MyAdapter(MainActivity.this,list); //绑定 recyclerview.setAdapter(adapter); } //初始化数据 添加假数据 private void initData() { list = new ArrayList<String>(); for (int i =0; i < 50; i++){ list.add("我是条目"+i); } } //初始化控件 private void initView() { btn1 = (Button) findViewById(R.id.btn1); btn2 = (Button) findViewById(R.id.btn2); btn3 = (Button) findViewById(R.id.btn3); btn4 = (Button) findViewById(R.id.btn4); btn5 = (Button) findViewById(R.id.btn5); recyclerview = (RecyclerView) findViewById(R.id.recyclerview); //监听事件 btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this); btn4.setOnClickListener(this); btn5.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: adapter.addData(1); break; case R.id.btn2: adapter.dele(1); break; case R.id.btn3: //现行管理器,支持横向、纵向 LinearLayoutManager maager = new LinearLayoutManager(this); recyclerview.setLayoutManager(maager); break; case R.id.btn4:
//网格布局管理器
GridLayoutManager manager2 = new GridLayoutManager(this,4); recyclerview.setLayoutManager(manager2); break; case R.id.btn5: //瀑布就式布局管理器StaggeredGridLayoutManager manager1 = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); recyclerview.setLayoutManager(manager1); break; } }}
4.适配器布局
<?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"> <ImageView android:id="@+id/img" android:src="@mipmap/ic_launcher" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv" android:text="我是条目" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 5.适配器
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ Context context; List<String>list= new ArrayList<>(); 构造方法 public MyAdapter(Context context, List<String> list) { this.context = context; this.list = list; } 添加数据 public void addData(int position){ list.add(position,"1"); notifyItemInserted(position); } 删除数据 public void dele(int position){ list.remove(position); notifyItemRemoved(position); } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context,R.layout.item,null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) { holder.img.setImageResource(R.mipmap.ic_launcher); holder.tv.setText(list.get(position)); } @Override public int getItemCount() { return list.size(); } ViewHolder的类,用于缓存控件 public class ViewHolder extends RecyclerView.ViewHolder { ImageView img; TextView tv; public ViewHolder(View itemView) { super(itemView); img = itemView.findViewById(R.id.img); tv = itemView.findViewById(R.id.tv); } } } 下图是实现效果图: