Android-RecyclerView(解析二)

添加点击事件,以及layoutManager的使用

1、适配器的编写

package com.example.recyclerview;

import java.util.List;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements View.OnClickListener{

    private Context context;
    private List<String>list;
    //4.1 创建接口对象
    private OnChildClickListener listnener;
    private RecyclerView recvclerView;

    //4.2 添加set监听方法,以防止与系统重名,修改方法名setOnChildListnener
    public void setOnChildClickListnener(OnChildClickListener listnener) {
        this.listnener = listnener;
    }

    /**
     * 3、MyAdapter的构造方法添加构造方法
     */
    public MyAdapter(Context context, List<String> list) {
        this.context = context;
        this.list = list;
    }
    /**
     * 1、编写viewHolder:注意再listView当中我们编写的viewHolder是我们自定义的,但是再RecyclerView
     * 中viewholder被规范化了,它需要继承自RecyclerView的viewHolder,写好自己的ViewHolder
     */
    public static class MyViewHolder extends RecyclerView.ViewHolder{

        private TextView text;
    /**
     * 2、编写viewHolder的构造方法
     */
        public MyViewHolder(View itemView) {
            super(itemView);
            //2.1找到item中的text
            text=(TextView) itemView.findViewById(R.id.item_text);
        }


    }
    /**
     * 3、实现它的三个抽象方法
     */

    /**
     * 返回这个adpter中一共有多少条数据
     */
    @Override
    public int getItemCount() {
        // TODO Auto-generated method stub
        return list.size();
    }
    /**
     * 把现在的数据绑定到原有的viewHolder上
     */
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        holder.text.setText(list.get(position));


    }
    /**
     * 相当于在listview中,onCreatView为空时,需要去创建viewHolder
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view=LayoutInflater.from(context).inflate(R.layout.item, parent,false);
    //7、由adapter去实现里面的抽象方法
    view.setOnClickListener(this);

    return new MyViewHolder(view);
    }
    //8、抽象方法
    @Override
    public void onClick(View v) {
        //8.1为了安全起见我们首先进行判断RecyclerView不能为空并且接口对象(listener)不等于空,点击事件才有用
        //8.2在点击时我们要获得这个position
        if(recvclerView!=null&&listnener!=null){
            int position=recvclerView.getChildAdapterPosition(v);
            listnener.onChildClick(recvclerView, v, position, list.get(position));
        }

    }

    /**
     * 4、添加点击事件接口(与listview不同)
     */
    public interface OnChildClickListener{
        void onChildClick(RecyclerView parent,View view,int position,/*数据模型对象*/String data);

    }
    /**
     * 5、连接到RecyclerView,为RecyclerView绑定数据时执行的方法
     */
    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        // TODO Auto-generated method stub
        super.onAttachedToRecyclerView(recyclerView);
        this.recvclerView=recyclerView;
    }
    /**
     * 6、与上面方法想对应,解绑的时候执行的方法
     */
    @Override
    public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
        // TODO Auto-generated method stub
        super.onDetachedFromRecyclerView(recyclerView);
        this.recvclerView=null;
    }
}

在MainActivity中调用adapter的点击事件运行

package com.example.recyclerview;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity implements MyAdapter.OnChildClickListener {

    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler);   
        //添加100条假数据
        List<String> list=new ArrayList<String>();
        for(int i=0;i<100;i++){
            list.add(String.format(Locale.CHINA, "第%03d条数据",i));
        }
        adapter=new MyAdapter(this, list);
        recycler.setAdapter(adapter);
        adapter.setOnChildClickListnener(this);
    }
    /**
     * 点击事件
     */
    @Override
    public void onChildClick(RecyclerView parent, View view, int position,
            String data) {
        //将点击的内容数据打印出来
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
    }

}

在adapter中添加增加和删除数据的方法:

package com.example.recyclerview;

import java.util.List;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements View.OnClickListener{

    private Context context;
    private List<String>list;
    //4.1 创建接口对象
    private OnChildClickListener listnener;
    private RecyclerView recvclerView;

    //4.2 添加set监听方法,以防止与系统重名,修改方法名setOnChildListnener
    public void setOnChildClickListnener(OnChildClickListener listnener) {
        this.listnener = listnener;
    }

    /**
     * 3、MyAdapter的构造方法添加构造方法
     */
    public MyAdapter(Context context, List<String> list) {
        this.context = context;
        this.list = list;
    }
    /**
     * 1、编写viewHolder:注意再listView当中我们编写的viewHolder是我们自定义的,但是再RecyclerView
     * 中viewholder被规范化了,它需要继承自RecyclerView的viewHolder,写好自己的ViewHolder
     */
    public static class MyViewHolder extends RecyclerView.ViewHolder{

        private TextView text;
    /**
     * 2、编写viewHolder的构造方法
     */
        public MyViewHolder(View itemView) {
            super(itemView);
            //2.1找到item中的text
            text=(TextView) itemView.findViewById(R.id.item_text);
        }


    }
    /**
     * 3、实现它的三个抽象方法
     */

    /**
     * 返回这个adpter中一共有多少条数据
     */
    @Override
    public int getItemCount() {
        // TODO Auto-generated method stub
        return list.size();
    }
    /**
     * 把现在的数据绑定到原有的viewHolder上
     */
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        holder.text.setText(list.get(position));


    }
    /**
     * 相当于在listview中,onCreatView为空时,需要去创建viewHolder
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view=LayoutInflater.from(context).inflate(R.layout.item, parent,false);
    //7、由adapter去实现里面的抽象方法
    view.setOnClickListener(this);

    return new MyViewHolder(view);
    }
    //8、抽象方法
    @Override
    public void onClick(View v) {
        //8.1为了安全起见我们首先进行判断RecyclerView不能为空并且接口对象(listener)不等于空,点击事件才有用
        //8.2在点击时我们要获得这个position
        if(recvclerView!=null&&listnener!=null){
            int position=recvclerView.getChildAdapterPosition(v);
            listnener.onChildClick(recvclerView, v, position, list.get(position));
        }

    }
    /**
     * 9、添加删除的方法,从指定位置删除
     */
    public void remove(int position){
        list.remove(position);
        /**
         * 9.1 删除后提醒刷新
         * 注意:  调用notifyDataSetChanged();将无删除特殊动画效果
         */
        notifyItemRemoved(position);
    }

    /**
     * 4、添加点击事件接口(与listview不同)
     */
    public interface OnChildClickListener{
        void onChildClick(RecyclerView parent,View view,int position,/*数据模型对象*/String data);

    }
    /**
     * 5、连接到RecyclerView,为RecyclerView绑定数据时执行的方法
     */
    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        // TODO Auto-generated method stub
        super.onAttachedToRecyclerView(recyclerView);
        this.recvclerView=recyclerView;
    }
    /**
     * 6、与上面方法想对应,解绑的时候执行的方法
     */
    @Override
    public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
        // TODO Auto-generated method stub
        super.onDetachedFromRecyclerView(recyclerView);
        this.recvclerView=null;
    }
}

MainActivity调用执行:

package com.example.recyclerview;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity implements MyAdapter.OnChildClickListener {

    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler);   
        //添加100条假数据
        List<String> list=new ArrayList<String>();
        for(int i=0;i<100;i++){
            list.add(String.format(Locale.CHINA, "第%03d条数据",i));
        }
        adapter=new MyAdapter(this, list);
        recycler.setAdapter(adapter);
        adapter.setOnChildClickListnener(this);
    }
    /**
     * 点击事件
     */
    @Override
    public void onChildClick(RecyclerView parent, View view, int position,
            String data) {
        //将点击的内容数据打印出来
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
        //调用删除item方法
        adapter.remove(position);
    }

}

layoutManager的使用:

package com.example.recyclerview;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
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.View;
import android.widget.Toast;

public class MainActivity extends Activity implements MyAdapter.OnChildClickListener {

    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler);   
        //添加100条假数据
        List<String> list=new ArrayList<String>();
        for(int i=0;i<100;i++){
            list.add(String.format(Locale.CHINA, "第%03d条数据",i));
        }
        adapter=new MyAdapter(this, list);

        /**
         * 在java代码中使用LinearLayoutManager,不在布局文件中使用
         */
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);//(垂直水平,是否翻转呈现布局)

        GridLayoutManager gridLayoutManager=new GridLayoutManager(this, 3);//(列数)

        //GridLayoutManager可以设置摸个item的样式
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {

            @Override
            public int getSpanSize(int position) {//占多少列
                if(position==0){
                    return 3; //第一行占三列
                }

                return 1;//默认占一列
            }
        });


        recycler.setLayoutManager(gridLayoutManager);//在xml布局中可以删掉对linearLayoutManager的引用

        recycler.setAdapter(adapter);
        adapter.setOnChildClickListnener(this);
    }
    /**
     * 点击事件
     */
    @Override
    public void onChildClick(RecyclerView parent, View view, int position,
            String data) {
        //将点击的内容数据打印出来
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
        //调用删除item方法
        adapter.remove(position);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值