0

我正在嘗試創建一系列可以在Android中執行的對話框菜單。 (基本上嘲笑Android中的USSD交互)。每個對話框都是一個包含編號選項的文本視圖菜單,供用戶輸入其編號選擇的EditText視圖,以及兩個按鈕Cancel和Send(進入下一步)。動態更新自定義佈局中的文本對話框,NPE - Android

雖然我可以讓我的第一個主菜單對話框顯示爲我想要的,但我的對話框文本動態更新時遇到了很多麻煩。當我嘗試調用TextView來設置文本時,它會一直給我一個NPE,我不知道爲什麼!

這裏是我的活動的初始代碼(該對話框立即彈出時啓動)

TextView txtContent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 
} 

protected void onStart() { 
    super.onStart(); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    // Get the layout inflater 
    LayoutInflater inflater = this.getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder.setView(inflater.inflate(R.layout.main_menu_dialog, null)) 
      // Add action buttons 
      .setPositiveButton(R.string.send, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        // Send number to next dialog 
        FirstTimeUse(); 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // End session 
       } 
      }); 
    AlertDialog dialog = builder.create(); 
    TextView txtContent = (TextView)findViewById(R.id.main_menu_options); 
    txtContent.setText(R.string.MainMenuText); 
    dialog.show(); 

} 

這裏是爲通用對話框視圖(稱爲主菜單,現在的佈局,但會更名爲通用的,如果我能得到這個工作)。 TextView的不包含任何文本,現在,因爲我希望它能夠動態地投入:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<TextView 
    android:id="@+id/main_menu_options" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="16dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:layout_marginBottom="4dp" /> 
<EditText 
    android:id="@+id/choice" 
    android:inputType="textShortMessage" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="4dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:layout_marginBottom="16dp" /> 

當我運行它,我得到這個錯誤:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(int)' on a null object reference 
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2411) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474) 

沒有我試過正在工作,所以任何幫助將不勝感激!謝謝!

回答

2

試試這個:

View dialogView = inflater.inflate(R.layout.main_menu_dialog, null); 
builder.setView(dialogView) 
... 
TextView txtContent = (TextView) dialogView.findViewById(R.id.main_menu_options); 
txtContent.setText(R.string.MainMenuText); 
+0

嘿,成功了!非常感謝!!你碰巧知道這是爲什麼?單獨創建一個視圖和上面的內容有什麼區別,它直接來自Android Dialog教程? – notchopra

+0

您正在搜索活動(或片段)視圖層次結構中的文本視圖。但對話框有自己的層次結構視圖(甚至是單獨顯示的窗口),因此您應該在後者中搜索它。 –

+0

明白了。再次感謝! – notchopra