繁体   English   中英

如何在AlertDialog中设置动态评分栏视图?

[英]How do i set dynamic rating bar view in AlertDialog?

首先,它运行平稳,但是当我再次单击它时,它停止了

尝试在AlertDialog设置动态评分栏视图时出现AlertDialog

java.lang.IllegalStateException:指定的子代已经有一个父代。 您必须先在孩子的父母上调用removeView()。

 rtb = LayoutInflater.from(getContext()).inflate(R.layout.ratingbar_dialog, null);
    rb = (RatingBar) rtb.findViewById(R.id.rtbDialog);

    ad = new AlertDialog.Builder(getContext());
    ad.setView(rtb);

    ll1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            ad.setMessage("Rate Price");

            ad.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                    dialogInterface.dismiss();
                }
            });
            ad.setPositiveButton("Submit", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    rtbPrice.setRating(rb.getRating());
                }
            });
            ad.show();
        }
    });

因为每次调用ad.show() ,都会创建一个新对话框,并将相同的视图rtb添加为对话框内容(因此第一次工作,然后在第二次引发异常)。
要解决这个问题:

  • 您可以将所有代码从inflatesetView移到onClick方法中
  • 或者在onClick内部,从其父级中删除rtb
    if (rtb.getParent() instanceOf ViewGroup) { ((ViewGroup) rtb.getParent()).removeView(rtb); }
  • 或重构您的代码,使其仅创建并显示一个对话框。

不要夸大view 通过setContentView()设置xml并通过FindviewbyId()访问rating bar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM