需求:点击按钮,弹出dialog, 实现 以下效果
首先,编辑 和添加 分别 是两个recycleview,然后 要实现 他们两个的数据交互,
代码 如下
:
//选择标签 choose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (addRecyle == null) { dialog = new AlertDialog.Builder(getActivity()).create(); dialog.show(); View view = UiUtils.inflate(getActivity(), R.layout.dialog_dscv); imgPack = (ImageView) view.findViewById(R.id.img_pack); editRecyle = (MyRecycleView) view.findViewById(R.id.edit_recyle); editRecyle.setLayoutManager(new GridLayoutManager(getActivity(), 4)); addRecyle = (MyRecycleView) view.findViewById(R.id.add_recyle); addRecyle.setLayoutManager(new GridLayoutManager(getActivity(), 4)); editAdapter = new DialogDscvAdapter(); addAdapter = new DialogDscvAdapter(); editRecyle.setAdapter(editAdapter); addRecyle.setAdapter(addAdapter); addAdapter.setShow(false); addAdapter.setDatas(addDatas); editAdapter.setDatas(editDatas); dialog.getWindow().setContentView(view); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( Global.mScreenWidth, Global.mScreenHeight - UiUtils.dp2px(getActivity(), 115)); dialog.getWindow().setContentView(view, params); dialog.getWindow().setGravity(Gravity.CENTER); dialog.setCanceledOnTouchOutside(false); dialog.getWindow().setBackgroundDrawableResource(R.drawable.tianjiagongnengbeijing_nav_find); initDialogListener(); } else { dialog.show(); } } });
//dialog里的recycleview的item单机事件 private void initDialogListener() { //编辑 addAdapter.setListener(new DialogDscvAdapter.MyListener() { @Override public void onItemClick(View v, String str) { addDatas.remove(str); editDatas.add(str); addAdapter.setDatas(addDatas); editAdapter.setDatas(editDatas); } }); //添加关注 editAdapter.setListener(new DialogDscvAdapter.MyListener() { @Override public void onItemClick(View v, String str) { editDatas.remove(str); addDatas.add(str); addAdapter.setDatas(addDatas); editAdapter.setDatas(editDatas); } }); //确定添加的按钮 imgPack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); titles.clear(); initTitles(); } }); }
public class DialogDscvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener{ private List<String> mDatas=new ArrayList<>(); private boolean show=true; public void setDatas(List<String> datas){ mDatas=datas; notifyDataSetChanged(); } public void setData(String data){ mDatas.add(data); notifyDataSetChanged(); } public void delData(String data){ mDatas.remove(data); notifyDataSetChanged(); } public void setShow(boolean show){ this.show=show; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=UiUtils.LayoutInflate(parent.getContext(),R.layout.dialog_item_dscv,parent); MViewHolder mHolder=new MViewHolder(view); view.setOnClickListener(this); return mHolder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { MViewHolder mHolder = (MViewHolder) holder; holder.itemView.setTag(mDatas.get(position)); mHolder.dlgTv.setText(mDatas.get(position)); if(show){ mHolder.dlgDel.setVisibility(View.VISIBLE); }else{ mHolder.dlgDel.setVisibility(View.INVISIBLE); } } @Override public int getItemCount() { return mDatas.size(); } class MViewHolder extends RecyclerView.ViewHolder { private TextView dlgTv; private ImageView dlgDel; public MViewHolder(View itemView) { super(itemView); dlgTv = (TextView) itemView.findViewById(R.id.dlg_tv); dlgDel = (ImageView) itemView.findViewById(R.id.dlg_del); } } @Override public void onClick(View v) { if(listener!=null){ listener.onItemClick(v, (String) v.getTag()); } } private MyListener listener; public interface MyListener{ void onItemClick(View v,String str); } public void setListener(MyListener listener){ this.listener=listener; } }需要注意的地方,当recycleview单机时,触动数据的改变,所以要用到 接口的回调,这里大家要多多研究,