2011-12-14 1 views
4

Немедленная помощь нужна !! Код, используемый для работы в порядке, но через некоторое время я заметил рейтинг Безразлично t work anymore and gives "the specified child already has a parent, call removeView() first..." on the alertDialog.show(); `строку:Указанный ребенок уже имеет родительскую ошибку при раздутом виде

///// 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(); 

     } 
    }); 

    ////// 

Странная вещь, если я называю removeAllViews() или removeView() непосредственно перед alertDialog.show(); он не откажет, но открывает испорченный диалог, где я могу видеть как рейтинг, так и текущую деятельность или что-то подобное. Также проблема может быть где-то еще в коде, потому что это работало отлично, любые идеи, что я должен искать или как это изменить, чтобы заставить его работать?

+0

Что линия является ошибка, указывающая на? –

+0

его в вопросе, alertDialog.show(); дает ошибку – user975869

ответ

9

Ошибка, которую вы получаете, заключается в том, что вы добавляете View родительскому объекту после того, как он уже был добавлен к родительскому объекту.

Глядя на ваш код, он выглядит,

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

добавить custom_rate_dialog вам layout_root. Затем, вы добавляете его к другому родителю, когда вы делаете rateDialogBuilder.setView(layout);

Если вы просто пытаетесь раздуть этот макет, чтобы установить его в качестве View для Dialog то просто сделать

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

, спасибо, что это может быть лучшей практикой, но проблема в том, что я случайно добавил android: id = "@ + id/layout_root" каким-то образом к макету основной деятельности xml ... глупо мне потребовалось 4 часа, чтобы заметить – user975869