最近在做项目,功能大概实现就是要把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); } } }
第一次写博客啊,小白水平,代码中有什么问题,大家可以多多指出,谢谢了