0

我需要更改對話框的外觀,因此我決定使用QustomDialogQustomDialogBu​​ilder找不到項目

我通過setCustomView使用自定義佈局,但是當我處理onClickClick的PositiveButton時我找不到我的佈局的任何元素。

佈局包括在EditText上:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <EditText 
     android:id="@+id/setServer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/server_url" /> 

</LinearLayout> 

監聽器是:

QustomDialogBuilder builder = new QustomDialogBuilder(this); 
/* Some customization */ 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        String url = ((EditText) findViewById(R.id.setServer)).getText().toString(); 
        if (Utilities.isUrl(url)) { 
         PreferenceHelper.setRestUrl(getApplicationContext(), url); 
        } else { 
         Toast.makeText(getApplicationContext(), "Invalid URL", Toast.LENGTH_SHORT); 
        } 
       } 
      }); 

但是,當我按下 「OK」 我得到java.lang.ClassCastException: com.android.internal.view.menu.ActionMenuItemView cannot be cast to android.widget.EditText

我該如何解決這個問題?

回答

1

可能是findViewById方法正在尋找錯誤的佈局(在活動佈局而不是對話框中)。

你可以嘗試創建與對話最終的變數時,會顯示它:

final AlertDialog dialog = builder.show(); 

然後在findViewById使用它:

String url = ((EditText) dialog.findViewById(R.id.setServer)).getText().toString(); 
+0

我已經找到了相同的解決方案調試代碼在幾分鐘前! 謝謝! – Luca 2014-09-02 10:18:09