我的PopupWindow
里有一个recyclerview
,在回收器中clicking
物品后,如何关闭PopupWindow
?
public SelectBucketMenu(Context context, ArrayList<String> mBucketNames, ArrayList<String> mImagesBucket) {
super(context);
this.mContext = context;
this.mBucketNames = mBucketNames;
this.mImagesBucket = mImagesBucket;
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setOutsideTouchable(true);
setFocusable(true);
//Need set windowlayout for API 19 otherwise window won't appear
setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
setupView();
}
private void setupView(){
View view = LayoutInflater.from(mContext)
.inflate(R.layout.popupmenu_selectbucket, null);
ButterKnife.bind(this, view);
setContentView(view);
mAdapter = new SelectBucketAdapter(mContext, mBucketNames, mImagesBucket);
mRecycler.setLayoutManager(new LinearLayoutManager(mContext));
mRecycler.setAdapter(mAdapter);
}
在我的ViewHolder中,我实现了一个onClick方法:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
@BindView(R.id.vh_selectbucketmenu_rellayout) RelativeLayout vhLayout;
int mPosition;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
vhLayout.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mPosition = getAdapterPosition();
//How to dismiss the menu?
}
}
编辑:
public interface OnRecyclerItemClick{
void dismissDialog();
}
SelectBucketMenu extends PopupWindow implements SelectBucketAdapter.OnRecyclerItemClick
@Override
public void onClick(View view) {
mPosition = getAdapterPosition();
}
这里如何调用接口方法?
有两种方法可以做到这一点:1(您可以使用interface
来分发您的对话框 2(您可以在适配器构造函数中发送对话框对象,然后在适配器中设置单击方法时设置其dialog.dismiss();
这将在您的适配器类中完成
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private OnRecyclerItemClick clickListner;
@BindView(R.id.vh_selectbucketmenu_rellayout) RelativeLayout vhLayout;
int mPosition;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
vhLayout.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mPosition = getAdapterPosition();
clickListner.dismissDialog();
//How to dismiss the menu?
}
}
这将在您的活动/片段中完成
private OnRecyclerItemClicklistner listner = new ViewPlanSelectedListner() {
@Override
public void OnRecyclerItemClick() {
dialog.dissmis();
}
};
适配器构造函数中没有发送列表器对象:
private void setupView(){
View view = LayoutInflater.from(mContext)
.inflate(R.layout.popupmenu_selectbucket, null);
ButterKnife.bind(this, view);
setContentView(view);
mAdapter = new SelectBucketAdapter(mContext, mBucketNames, mImagesBucket, listner);
mRecycler.setLayoutManager(new LinearLayoutManager(mContext));
mRecycler.setAdapter(mAdapter);
}
编辑:Sandeep Malik还有另外两个有效的选项。由您选择。:)
您可以将 ViewHolder 用作 SelectBucketMenu 中的内部类,假设 SelectBucketMenu 具有如下所示的 dismiss(( 函数:
public SelectBucketMenu(Context context, ArrayList<String> mBucketNames, ArrayList<String> mImagesBucket) {
super(context);
this.mContext = context;
this.mBucketNames = mBucketNames;
this.mImagesBucket = mImagesBucket;
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setOutsideTouchable(true);
setFocusable(true);
//Need set windowlayout for API 19 otherwise window won't appear
setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
setupView();
}
private void setupView(){
View view = LayoutInflater.from(mContext)
.inflate(R.layout.popupmenu_selectbucket, null);
ButterKnife.bind(this, view);
setContentView(view);
mAdapter = new SelectBucketAdapter(mContext, mBucketNames, mImagesBucket);
mRecycler.setLayoutManager(new LinearLayoutManager(mContext));
mRecycler.setAdapter(mAdapter);
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
@BindView(R.id.vh_selectbucketmenu_rellayout) RelativeLayout vhLayout;
int mPosition;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
vhLayout.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mPosition = getAdapterPosition();
dismiss(); // Here's what you need
}
}
}
可以通过 RecyclerView Adapter 构造函数传递 Dialog 或 AlertDialog 引用。然后,您可以关闭单击事件中的对话框。如果对弹出窗口使用普通视图,则可以通过 RecyclerView 适配器构造函数传递视图引用,并在单击事件中传递可见性。