Java 获取值并关闭带有循环视图和自定义适配器的对话框

Java 获取值并关闭带有循环视图和自定义适配器的对话框,java,android,android-recyclerview,android-adapter,Java,Android,Android Recyclerview,Android Adapter,在我的应用程序中,我会显示一个带有自定义适配器的对话框,其中有一个项目列表。我想获取在对话框上单击的项目的值并关闭它。。。。我只能正确地显示它 以下是我创建对话框的方式: AlertDialog dialogBuilder = new AlertDialog.Builder(mContext).create(); LayoutInflater inflater = getLayoutInflater(); View dialogView = inflater.

在我的应用程序中,我会显示一个带有自定义适配器的对话框,其中有一个项目列表。我想获取在对话框上单击的项目的值并关闭它。。。。我只能正确地显示它

以下是我创建对话框的方式:

      AlertDialog dialogBuilder = new AlertDialog.Builder(mContext).create();
      LayoutInflater inflater = getLayoutInflater();
      View dialogView = inflater.inflate(R.layout.banderes_dialog, null);

      myrecyclerview = dialogView.findViewById(R.id.recycleview);
      myrecyclerview.setLayoutManager(new LinearLayoutManager((dialogView.getContext())));
      RecyclerViewAdapterLanguages recyclerAdapter = new RecyclerViewAdapterLanguages(dialogView.getContext(), lstLanguages);
      myrecyclerview.addItemDecoration(new DividerItemDecoration(dialogView.getContext(), DividerItemDecoration.VERTICAL));
      myrecyclerview.setAdapter(recyclerAdapter);


      dialogBuilder.setView(dialogView);
      dialogBuilder.show();
这是我的oncreateviewholder:

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v;
        v= LayoutInflater.from(mContext).inflate(R.layout.bandera_item,parent,false);
        final MyViewHolder vHolder = new MyViewHolder(v);

        vHolder.item_language.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Toast.makeText(mContext, "Click on an item", Toast.LENGTH_SHORT).show();

            }
        });

        return vHolder;
    }

我如何知道该项目点击了我的主要活动。如何关闭oncreateviewholder上的对话框(在祝酒之后)


谢谢

您可以拥有一个接口,并在活动上使用它的回调来关闭对话框

public interface OnItemClickListner {
    void OnItemClicked(View view, int position);
}
将侦听器传递给适配器,然后在项目中单击

vHolder.item_language.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Toast.makeText(mContext, "Click on an item", 
                Toast.LENGTH_SHORT).show();
                onItemClickListner.OnItemClicked(v, position);
            }
        });
然后在活动中实现接口 在此之后,您就有了覆盖方法,可以在其中关闭对话框

@Override
public void OnItemClicked(View view, int position) {
    dialog.dismiss();
}


谢谢你,维卡斯,看来这是正确的选择。但是我犯了一个错误。我定义了一个全局单击列表监视器ClickListner;变量,然后调用mOnItemClickListner.OnItemClicked(v,位置);但是我遇到了这个错误:尝试在空对象引用上调用接口方法“void com.test.sample.adapters.RecycleServiceAdapterLanguages$OnItemClickListner.OnItemClicked(android.view.view,int)”,这可能是因为您没有将接口引用传递给适配器。必须像
private void setListener(OnItemClickListner monitemcclicklistner){this.monitemcclicklistner=monitemcclicklistner}
一样在适配器中设置监听器,同时在活动中初始化适配器。嗨,Vikas,我想我在适配器中做了部分(只需在上面复制文本),但是我不知道如何在活动中初始化侦听器。。。。感谢您的帮助执行此操作
myrecyclerview.setListener(新建OnItemClickListner(){public void OnItemClicked(视图视图,int位置){dialog.dismise();}})谢谢你的好话,很高兴帮助你!!