RecyclerView

RecyclerView依赖: implementation 'com.android.support:recyclerview-v7:28.0.0

RecyclerView是谷歌官方推荐的用来代替ListView的布局管理器
RecyclerView相对于ListView的优点

  • RecyclerView比ListView实现的效果更多
  • RecyclerView支持多布局
  • RecyclerView根据项目的需要插拔功能
  • RecyclerView的适配器相比ListViwe减少大量代码量

RecyclerView无法直接实现item点击事件需要通过接口回调的方式实现

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    ArrayList<Bean> list = new ArrayList<>();
    MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.rv);
        list.add(new Bean(R.mipmap.a,"awsl"));
        list.add(new Bean(R.mipmap.a1,"awsl"));
        list.add(new Bean(R.mipmap.a2,"awsl"));
        list.add(new Bean(R.mipmap.a3,"awsl"));
        list.add(new Bean(R.mipmap.a4,"awsl"));
        list.add(new Bean(R.mipmap.a5,"awsl"));
        list.add(new Bean(R.mipmap.a6,"awsl"));
        list.add(new Bean(R.mipmap.a7,"awsl"));
        list.add(new Bean(R.mipmap.a8,"awsl"));
        list.add(new Bean(R.mipmap.a9,"awsl"));
        list.add(new Bean(R.mipmap.a10,"awsl"));
        list.add(new Bean(R.mipmap.a11,"awsl"));
        adapter = new MyAdapter(list,this);
        recyclerView.setAdapter(adapter);
        //有三种布局格式:
        //LinearLayoutManager 
        //StaggeredGridLayoutManager(瀑布流布局)  参数一:瀑布列数 参数二:格式 根据需求选择
        //GridLayoutManager
        final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
        //用在适配器中回调的点击事件
        adapter.setInterfaceDemo(new InterfaceDemo() {
            @Override
            public void onclick(int position) {
                Toast.makeText(MainActivity.this, ""+position+"被点击了", Toast.LENGTH_SHORT).show();
//                list.remove(position);
//                list.add(new Bean(R.mipmap.a11,"wdnmd"));
                Bean bean = list.get(position);
                bean.setName("wdnmd");
                
                //刷新删除的条目
//                adapter.notifyItemRemoved(position);
 		//刷新添加的动画
                adapter.notifyItemChanged(position);
            }
        });
        //添加动画
        DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
        //不同的修改要用不同的刷新
        defaultItemAnimator.setRemoveDuration(2000);
        defaultItemAnimator.setChangeDuration(2000);
        defaultItemAnimator.setAddDuration(2000);
        recyclerView.setItemAnimator(defaultItemAnimator);
    }
}
class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    ArrayList<Bean> list;
    Context context;  
    //实现接口
    InterfaceDemo interfaceDemo;

	//重写set方法
    public void setInterfaceDemo(InterfaceDemo interfaceDemo) {
        this.interfaceDemo = interfaceDemo;
    }

    public MyAdapter(ArrayList<Bean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @NonNull
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, final int i) {
    	   //设置布局填充
        View view = LayoutInflater.from(context).inflate(R.layout.item_layout, null);
	   //返回一个自定义的Holder类
        return new MyViewHolder(view);

    }
	//绑定ViewHolder 设置内容
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
        Bean bean = list.get(i);
        myViewHolder.textView.setText(list.get(i).getName()+"");
//        RequestOptions requestOptions = new RequestOptions();
        Glide.with(context).applyDefaultRequestOptions(RequestOptions.bitmapTransform(new RoundedCorners(30))).load(list.get(i).getImageView()).into(myViewHolder.imageView);
//        myViewHolder.imageView.setImageResource(list.get(i).getImageView());
		//设置点击事件
        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //实现接口的方法 将item下标传进去
                interfaceDemo.onclick(i);
            }
        });
//        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) myViewHolder.imageView.getLayoutParams();
        //获取条目的宽度
//        float itemwidth = (ScreenUtils.getScreenWidth(myViewHolder.itemView.getContext())-10*3)/2;
//        layoutParams.weight = (int)itemwidth;
//        float scale = (itemwidth+0f)/bean.
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
	//相当于listView中的ViewHolder 用来搜索控件
     class MyViewHolder extends RecyclerView.ViewHolder{
        ImageView imageView;
        TextView textView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageView);
            ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
            //设置一个范围内的随机item高度 实现瀑布效果
            int random = (int)(Math.random()*400+200);
            Toast.makeText(context, ""+random, Toast.LENGTH_SHORT).show();
            layoutParams.height = random;
            imageView.setLayoutParams(layoutParams);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}
//接口
public interface InterfaceDemo {
    public void onclick(int position);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值