2011-12-14 8 views
4

即時ヘルプが必要です!コードが正常に動作するために使用されるが、しばらくすると、私は評価t work anymore and gives "the specified child already has a parent, call removeView() first..." on the alertDialog.showを()のdoesn気づい; `ライン:指定された子は、膨張したビューで親エラーを既に持っています

///// 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

ためViewとして設定することレイアウトを膨らませるためにしようとしている場合はその後、あなたはrateDialogBuilder.setView(layout);

を行う別の親にそれを追加していますエラーは? –

+0

その問題では、alertDialog.show();エラー – user975869

答えて

9

エラーは、既に親に追加された後でViewを親に追加するというエラーです。

あなたのコードを見てみると、それはlayout_rootあなたに

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

追加custom_rate_dialog、のように見えます。あなただけの何行があるDialogそしてちょうど行う

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

これは良い練習かもしれないが、おかげで問題を起こしましたが、問題は私がアンドロイドを追加したことでした:id = "@ + id/layout_root"何とか主なアクティビティのレイアウトxmlに...愚かな私は4時間 – user975869

関連する問題