前言
效果:
【核心问题在于PopupWindow上下文环境不知道怎么写?】
onClick()中的final VIEw root = LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout, null, false);
的from()参数
和onCreateVIEwHolder()中的VIEw vIEw= LayoutInflater.from(mcontext).inflate(R.layout.ListvIEw_item,parent,false);
的上下文是同一个上下文。
可以写parent.getContext()
,也可以写个mcontext类成员变量。
ItemAdapter.java:RecyclerVIEw的自定义Adapter
package com.example.myapplication;import androID.content.Context;import androID.vIEw.Gravity;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.button;import androID.Widget.linearLayout;import androID.Widget.PopupWindow;import androID.Widget.TextVIEw;import androID.Widget.Toast;import androIDx.annotation.NonNull;import androIDx.recyclervIEw.Widget.RecyclerVIEw;import java.util.List;public class ItemAdapter extends RecyclerVIEw.Adapter<ItemAdapter.VIEwHolder> { private List<Item> mitemList; private Context mcontext; static class VIEwHolder extends RecyclerVIEw.VIEwHolder { TextVIEw itemname; TextVIEw itemProgress; button itemBtn; public VIEwHolder(VIEw vIEw) { super(vIEw); itemname=vIEw.findVIEwByID(R.ID.name); itemProgress=vIEw.findVIEwByID(R.ID.progress); itemBtn=vIEw.findVIEwByID(R.ID.show); } } public ItemAdapter(Context context,List<Item> itemList) { this.mitemList=itemList; this.mcontext=context; } @OverrIDe public int getItemCount() { return mitemList.size(); } @NonNull @OverrIDe public VIEwHolder onCreateVIEwHolder(@NonNull VIEwGroup parent, int vIEwType) { VIEw vIEw= LayoutInflater.from(mcontext).inflate(R.layout.ListvIEw_item,parent,false); final VIEwHolder vIEwHolder=new VIEwHolder(vIEw); vIEwHolder.itemBtn.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { int pos=vIEwHolder.getAdapterposition(); switch (pos) { case 0: { final VIEw root = LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout, null, false); final PopupWindow popupWindow = new PopupWindow( root, VIEwGroup.LayoutParams.WRAP_CONTENT, VIEwGroup.LayoutParams.WRAP_CONTENT, true ); vIEwHolder.itemBtn.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { popupWindow.showAtLocation(root, Gravity.CENTER, 0, 0); } }); button btn_close = root.findVIEwByID(R.ID.close); btn_close.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { popupWindow.dismiss(); } }); break; } default: break; } } }); return vIEwHolder; } @OverrIDe public voID onBindVIEwHolder(@NonNull VIEwHolder holder, int position) { Item item=mitemList.get(position); holder.itemname.setText(item.getname()); holder.itemProgress.setText(item.getProgress()); }}
写法2:parent.getContext() @NonNull @OverrIDe public VIEwHolder onCreateVIEwHolder(@NonNull final VIEwGroup parent, int vIEwType) { VIEw vIEw= LayoutInflater.from(parent.getContext()).inflate(R.layout.ListvIEw_item,parent,false); final VIEwHolder vIEwHolder=new VIEwHolder(vIEw); vIEwHolder.itemBtn.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { int pos=vIEwHolder.getAdapterposition(); switch (pos) { case 0: { final VIEw root = LayoutInflater.from(parent.getContext()).inflate(R.layout.popupwindow_layout, null, false); final PopupWindow popupWindow = new PopupWindow( root, VIEwGroup.LayoutParams.WRAP_CONTENT, VIEwGroup.LayoutParams.WRAP_CONTENT, true ); vIEwHolder.itemBtn.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { popupWindow.showAtLocation(root, Gravity.CENTER, 0, 0); } }); button btn_close = root.findVIEwByID(R.ID.close); btn_close.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { popupWindow.dismiss(); } }); break; } default: break; } } }); return vIEwHolder; }
总结 以上是内存溢出为你收集整理的【Android】RecyclerView中点击Itemd出PopupWindow全部内容,希望文章能够帮你解决【Android】RecyclerView中点击Itemd出PopupWindow所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)