android - 指定的 child 在膨胀 View 上已经有父错误

标签 android android-layout view dialog android-inflate

需要立即帮助!!该代码过去工作正常,但过了一会儿我注意到评级不再不再工作,并在 alertDialog.show 上给出“指定的 child 已经有 parent ,请先调用 removeView()...” ();`行:

///// Rating bar initialising
    Context mContext = ShowActivity.this;
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    layout = inflater.inflate(R.layout.custom_rate_dialog, (ViewGroup) findViewById(R.id.layout_root));

    final RatingBar rating_indicator = (RatingBar)findViewById(R.id.rating_bar_cafe_indicator);
    final float current_rating = (float)mDbHelper.getInt(mRowId, type, RATE_COLUMN);
    rating_indicator.setRating(current_rating);


    rateDialogBuilder = new AlertDialog.Builder(ShowActivity.this);
    rateDialogBuilder.setView(layout);
    rateDialogBuilder.setCancelable(false);
    rateDialogBuilder.setIcon(R.drawable.rate_star_med_on);
    rateDialogBuilder.setTitle("RATE IT!");
    rateDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            rating_indicator.setRating(mDbHelper.getInt(mRowId, type, RATE_COLUMN));
            ((ViewGroup)layout.getParent()).removeView(layout);
            dialog.cancel();
        }
    });

    ratingText = (TextView) layout.findViewById(R.id.rate_text);
    rating = (RatingBar) layout.findViewById(R.id.rating_bar_cafe);
    rating.setRating(current_rating);
    rating.setStepSize(1);
    rating.setOnRatingBarChangeListener(ShowActivity.this);

    if ((int)current_rating != 0) ratingText.setText("Your rating: " + (int)current_rating); 

    Button rateButton = (Button) findViewById(R.id.button_rate); 
    rateButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            AlertDialog alertDialog = rateDialogBuilder.create(); 
            alertDialog.show();

        }
    });

    //////

奇怪的是,如果我在 alertDialog.show(); 之前调用 removeAllViews()removeView() 它不会崩溃但打开困惑的对话,我可以在其中看到评级和当前 Activity 或 smth。此外,问题可能出在代码中的其他地方,因为它过去工作正常,有什么想法我应该寻找什么或如何更改它以使其工作?

最佳答案

您遇到的错误是您在将 View 添加到父项后将其添加到父项。

看看你的代码,它看起来像,

layout = inflater.inflate(R.layout.custom_rate_dialog, (ViewGroup) findViewById(R.id.layout_root));

为您添加 custom_rate_dialog layout_root。然后,当您执行 rateDialogBu​​ilder.setView(layout);

时将其添加到另一个父级

如果您只是想扩充该布局以将其设置为 DialogView,那么只需执行

layout = inflater.inflate(R.layout.custom_rate_dialog, null);

关于android - 指定的 child 在膨胀 View 上已经有父错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8498326/

相关文章:

android - 如何在具有特定颜色的android中删除textview

Android Facebook 相册显示使用 Facebook Android sdk

android - 仅适用于 Android 4.0.3-4.0.4 的某些设备上 TabHost 上的应用程序崩溃

隐藏在底部栏下方的Android float 操作栏

android - 动态计算 View 元素的大小

android - 如何将buttonView从原来的位置移动到Android中的新位置?

java - 以编程方式设置 imageview 前景渐变颜色

android - 新手应该忘记 fragment 吗?

ios - map View 不关注注释

ruby-on-rails - Rails不使用application.html.erb