[英]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
添加为对话框内容(因此第一次工作,然后在第二次引发异常)。
要解决这个问题:
inflate
到setView
移到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.