RecycleView是Android5.0出现的新控件,替换listview
RecycleView采用的是MVC适配器模式,提供了一种插拔式的体验,高度解耦,异常灵活,可以通过布局管理器实现很多种效果(垂直,水平瀑布流的效果,功能强大)
首先,先导依赖
implementation 'com.android.support:recyclerview-v7:28.0.0'
xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/add"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="添加"
android:layout_weight="1"/>
<Button
android:id="@+id/delete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="删除"
android:layout_weight="1"/>
<Button
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="List"
android:layout_weight="1"/>
<Button
android:id="@+id/grid"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Grid"
android:layout_weight="1"/>
<Button
android:id="@+id/flow"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Flow"
android:layout_weight="1"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycleView"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/image"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tv"
android:gravity="center"
android:text="啊哈哈哈哈哈"
app:layout_constraintLeft_toRightOf="@+id/image"
android:textSize="20sp"/>
</LinearLayout>
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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.support.v7.widget.StaggeredGridLayoutManager;
import android.view.ContextMenu;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.bwie.recycleview.adapter.Madapter;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button add;
private Button delete;
private Button list;
private Button grid;
private Button flow;
List<String> dlist;
Madapter madapter;
private RecyclerView recycleView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//初始化数据
initData();
}
private void initData() {
dlist = new ArrayList<>();
for (int i=0; i<20;i++){
dlist.add("content_"+i);
}
//适配器
madapter = new Madapter(this,dlist);
recycleView.setAdapter(madapter);
//布局管理器
recycleView.setLayoutManager(new LinearLayoutManager(this,LinearLayout.VERTICAL,false));
//增加,移除动画
recycleView.setItemAnimator(new DefaultItemAnimator());
//条目点击
madapter.setItemClick(new Madapter.ItemClick() {
@Override
public void itemc(View view,int Position) {
Toast.makeText(MainActivity.this,"哈哈哈哈哈"+Position,Toast.LENGTH_SHORT).show();
}
});
}
private void initView() {
add = (Button) findViewById(R.id.add);
delete = (Button) findViewById(R.id.delete);
list = (Button) findViewById(R.id.list);
grid = (Button) findViewById(R.id.grid);
flow = (Button) findViewById(R.id.flow);
recycleView = (RecyclerView) findViewById(R.id.recycleView);
add.setOnClickListener(this);
delete.setOnClickListener(this);
list.setOnClickListener(this);
grid.setOnClickListener(this);
flow.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.add:
madapter.addDatas(0);
recycleView.scrollToPosition(0);
break;
case R.id.delete:
madapter.removeDatas(0);
// recycleView.scrollToPosition(0);
break;
case R.id.list:
//布局管理器
recycleView.setLayoutManager(new LinearLayoutManager(this,LinearLayout.VERTICAL,false));
//添加分割线
recycleView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
break;
case R.id.grid:
recycleView.setLayoutManager(new GridLayoutManager(this,3));
break;
case R.id.flow:
//瀑布流
//StaggeredGridLayoutManager.VERTICAL代表有多少列;
// StaggeredGridLayoutManager.HORIZONTAL代表有多少行
recycleView.setLayoutManager(new StaggeredGridLayoutManager
(4, StaggeredGridLayoutManager.VERTICAL));
break;
}
}
}
适配器
import android.media.Image;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bwie.recycleview.MainActivity;
import com.bwie.recycleview.R;
import java.util.List;
/**
* date:2018/11/14
* author:QMY(QMY)
* function:
*/
public class Madapter extends RecyclerView.Adapter<Madapter.ViewHolder> {
private final MainActivity mainActivity;
private final List<String> dlist;
public Madapter(MainActivity mainActivity, List<String> dlist) {
this.mainActivity = mainActivity;
this.dlist = dlist;
}
@NonNull
@Override
//创建viewholder
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(mainActivity, R.layout.item_list, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
viewHolder.tv.setText(dlist.get(i));
//条目点击事件
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int layoutPosition = viewHolder.getLayoutPosition();
mItemClick.itemc(viewHolder.itemView,layoutPosition);
}
});
}
@Override
public int getItemCount() {
return dlist.size();
}
public void addDatas(int i) {
dlist.add(i,"HAHAHAHA");
notifyItemInserted(i);
}
public void removeDatas(int i) {
dlist.remove(i);
notifyItemRemoved(i);
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView image;
TextView tv;
public ViewHolder(@NonNull final View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
tv = itemView.findViewById(R.id.tv);
}
}
//定义接口
public interface ItemClick{
void itemc(View view,int Position);
}
public ItemClick mItemClick;
public void setItemClick(ItemClick itemClick){
mItemClick=itemClick;
}
}