Android 回调用法个人分享

  
       最近在做项目,功能大概实现就是要把Adapter中需要选择的数据回传到Activity的布局中,虽然Adapter中定义有OnItemSelectListener

Item的选择监听器,但是总想尝试改变以前常用方法,于是就想着回调的方式来实现Adapter的数据回传。

       下面是我实现主要代码实现的步骤:

        1.需要在Adapter中定义一个内部接口,以及接口的属性变量,代码贴一下:

       

  private TeacherChooseListener teacherChooseListener;    //接口成员变量

  public interface TeacherChooseListener{                 //定义接口

    public void  setTeacher(String teacherName,int tid); //接口方法,需要调用者实现

  }

         2.给Adapter设置接口成员变量,这个变量需要实现接口时设置,可看步骤5

  public void setTeacherChooseListener(TeacherChooseListener teacherChooseListener) {
    this.teacherChooseListener = teacherChooseListener;
}
         3.就是调用接口方法,给接口方法参数赋值,看步骤6

  @Override
  public void onClick(View view) {
     Teacher teacher=(Teacher) view.getTag();//获取老师的名字
     String tname=teacher.getName();
     int tid=(Integer)teacher.getTid();//获取老师的id
     System.out.println("老师的名字和id"+tname+"--"+tid);
     teacherChooseListener.setTeacher(tname,tid);     //调用接口方法,并传递参数

}
      4.接下来就是通过实现接口来获取到Adapter的传递参数了,在Activity中实现

  public class AddHolidayActivity extends BaseActivity implements View.OnClickListener,
        AddHolidayViewInterface,TeachersAdapter.TeacherChooseListener {  //实现接口

      5.使用Adapter来设置监听接口变量,Activity中实现

   

  teachers=new ArrayList<>();

  adapter=new TeachersAdapter(teachers,this);
  adapter.setTeacherChooseListener(this);    //Adapter设置接口变量
     6.重写接口成员方法来获取回调数据,Activity中实现

  @Override
  public void setTeacher(String teacherName, int tid) {
    this.Tid=tid;
    System.out.println("activity:"+teacherName);
    chooseTeacher.setText(teacherName);
    dialog.dismiss();

  }
     到这里,Adapter中的数据就可以传递到Actiivity里面了,以上就是实现回调的基本步骤了,最后再贴一下Adapter的代码

/**
 * 使用TeacherAdapter展现老师数据,并使用回调方法实现,老师的选择
 * Created by ying_xiang on 2016/8/31.
 */
public class TeachersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {

    private List<Teacher> teachers;
    private Context mContext;
    private TeacherChooseListener teacherChooseListener;    //接口成员变量

    public interface TeacherChooseListener{

        public void  setTeacher(String teacherName,int tid);

    }
    public void setTeacherChooseListener(TeacherChooseListener teacherChooseListener) {
        this.teacherChooseListener = teacherChooseListener;
    }

    public TeachersAdapter(List<Teacher> teachers, Context mContext) {
        this.teachers = teachers;
        this.mContext = mContext;
    }

    @Override
    public void onClick(View view) {
        Teacher teacher=(Teacher) view.getTag();//获取老师的名字
        String tname=teacher.getName();
        int tid=(Integer)teacher.getTid();//获取老师的id
        System.out.println("老师的名字和id"+tname+"--"+tid);
        teacherChooseListener.setTeacher(tname,tid);     //调用接口方法,并传递参数

    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.teacher_dialog_item, parent, false);
        return new ItemHolder(view) ;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        ItemHolder itemHolder=(ItemHolder)holder;
        itemHolder.teacherName.setText(teachers.get(position).getName());
        itemHolder.teacherItem.setTag(teachers.get(position));

        itemHolder.teacherItem.setOnClickListener(this);
    }

    @Override
    public int getItemCount() {
        return teachers.size();
    }
    static class ItemHolder extends RecyclerView.ViewHolder{


        TextView teacherName;
        LinearLayout teacherItem;
        public ItemHolder(View itemView) {
            super(itemView);
            teacherName=(TextView)itemView.findViewById(R.id.teacherName);
            teacherItem=(LinearLayout)itemView.findViewById(R.id.teacherItem);



        }
    }

}
    
第一次写博客啊,小白水平,代码中有什么问题,大家可以多多指出,谢谢了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值