在 Cardview 中单击按钮打开对话框

Open DialogBox on click on button in Cardview

我是 android 开发的初学者,我面临的问题是,一旦我单击 CardView 上的编辑按钮,就不会显示警报对话框,我将在其中更新与该 cardview 相关的详细信息。

我尝试通过放置 Toast 来检查它是否工作并因此工作,使编辑按钮可用,我什至在主 activity 中创建了一个单独的对话框,只是为了看看它是否工作并且它有效,但是当我使用 class 的对象在适配器中调用相同的对象时,它会出错。

我正在从数据库中检索数据并将其转换为 Json,并且此数据使用 StringRequest 和 volley 网络显示在 Recyclerview 的 Cardview 中

预期输出: 在 Recycler 视图中单击 Cardview 上的 EditButton 它应该向我显示一个警报或对话框,其中将包含我单击并在对话框中输入然后提交的卡片的人的姓名。

有人节省了我的时间,因为我已经投入了很多时间尝试..提前谢谢你

适配器代码:

@Override
public void onBindViewHolder(MyClientTrackAdapter.ViewHolder holder, int position) {
    // Find out the data, based on this view holder's position
    final ListClientTrackIssue listClient = listClients.get(position);
    holder.textViewCustomer.setText(listClient.getCustomername());
    holder.textViewcurdate.setText(listClient.getCurdate());
    holder.textViewcurtime.setText(listClient.getCurtime());
    holder.textViewtargetdate.setText(listClient.getTargetdate());
    holder.textViewtargettime.setText(listClient.getTargettime());
    holder.textViewquery.setText(listClient.getQuery());
    holder.textViewaddress.setText(listClient.getAddress());
    holder.textViewassigned.setText(listClient.getAssignedperson());
    holder.textViewcomment.setText(listClient.getComment());
    holder.textViewstatus.setText(listClient.getStatus());

    holder.editbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(),"edit"+listClient.getCustomername(),Toast.LENGTH_SHORT).show();
            new AlertDialog.Builder(context)
                    .setMessage("client"+listClient.getCustomername())
                    .setTitle("Client Status update")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.i("Result","Success");
                        }
                    })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.i("Result","Success");
                        }
                    })
                    .show();

        }

    });

}

@Override
public int getItemCount() {
    return listClients.size();
}

class ViewHolder extends RecyclerView.ViewHolder {
    Button editbutton;
    TextView textViewCustomer,textViewcurdate,textViewcurtime,textViewtargetdate,textViewtargettime,
                textViewquery,textViewaddress,textViewassigned,textViewcomment,textViewstatus;
    public ListCustomer listCustomer;

    public ViewHolder(View itemView) {
        super(itemView);

        textViewCustomer=itemView.findViewById(R.id.textViewCustomer);
        textViewcurdate=itemView.findViewById(R.id.textViewcurdate);
        textViewcurtime=itemView.findViewById(R.id.textViewcurtime);
        textViewtargetdate=itemView.findViewById(R.id.textViewtargetdate);
        textViewtargettime=itemView.findViewById(R.id.textViewtargettime);
        textViewquery=itemView.findViewById(R.id.textViewquery);
        textViewaddress=itemView.findViewById(R.id.textViewaddress);
        textViewassigned=itemView.findViewById(R.id.textViewassigned);
        textViewcomment=itemView.findViewById(R.id.textViewcomment);
        textViewstatus=itemView.findViewById(R.id.textViewstatus);

        this.editbutton=itemView.findViewById(R.id.editbtn);

主要class代码:

public void showChangeLangDialog(){
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    LayoutInflater inflater = this.getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.edit_dialog, null);
    dialogBuilder.setView(dialogView);

    //final EditText edt = (EditText) dialogView.findViewById(R.id.edit1);

    dialogBuilder.setTitle("Update Client Status");
    dialogBuilder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            //do something with edt.getText().toString();
        }
    });
    dialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            //pass
        }
    });
    AlertDialog b = dialogBuilder.create();
    b.show();
}
just create interface in adapter class and  
Interface 
public interface Clicked{
        void Buttonclick(View v,int position);
    }
    Clicked clicked;

button click
yourbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pos = (int) v.getTag();
                if (clicked != null) {
                    clicked.Buttonclick(v, pos);
                }
            }
        });
Adapter adapter=new Adapter(yourlist, new Adapter.Clicked() {
            @Override
            public void click(View view, int position) {
                if(view.getId()==your view id) { 
showdialog();
                }

            }
        });



this way you can get click of button in cardview in your activity/fragment and you can show dialog 
holder.editbutton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(v.getContext(),"edit"+listClient.getCustomername(),Toast.LENGTH_SHORT).show();
        new AlertDialog.Builder(v.getRootView().getContext())
                .setMessage("client"+listClient.getCustomername())
                .setTitle("Client Status update")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("Result","Success");
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("Result","Success");
                    }
                })
                .show();

    }

});

我是 android 开发的新手,但我在适配器中创建了自定义对话框,这里是代码:

  holder.viewDesign.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final Dialog dialog = new Dialog(mCtx);
            dialog.setContentView(R.layout.show_standerd_product);
            dialog.setTitle("Position" + position);
            dialog.setCancelable(true);

            ImageView d_image = dialog.findViewById(R.id.dialog_design_image);
            TextView d_type = dialog.findViewById(R.id.dialog_design_type);
            TextView d_name = dialog.findViewById(R.id.dialog_design_name);
            TextView d_cost = dialog.findViewById(R.id.dialog_design_cost);


            d_type.setText(standerdProduct.getType());
            d_name.setText(standerdProduct.getName());
            d_cost.setText("Cost :" + String.valueOf(standerdProduct.getAmount()));

            Glide.with(mCtx)
                    .load("http://yourSystemIpAddressforXAMP/darzee/" + standerdProduct.getImage())
                    .into(d_image);


            dialog.show();

        }
    });