2017-01-16 42 views
-1

首先,它運行平穩,但是當我點擊它再次停止如何在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(); 
     } 
    }); 

回答

1

不要膨脹view。 。 通過setContentView()設置XML和訪問rating bar通過FindviewbyId()

2

因爲每次調用ad.show()時,將創建一個新的對話框,並在相同的觀點rtb將作爲對話的內容(所以第1次工作,然後例外是第二次提高)。
要修復它:

  • 你可以從inflate把所有的代碼setViewonClick方法
  • 或內部onClick,刪除rtb從它的父:
    if (rtb.getParent() instanceOf ViewGroup) { ((ViewGroup) rtb.getParent()).removeView(rtb); }
  • 或者重構你的代碼讓它只創建並顯示一個對話框。
相關問題