回收器在弹出窗口中查看,单击项目后如何关闭?



我的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 适配器构造函数传递视图引用,并在单击事件中传递可见性。

最新更新