2013-07-23 172 views
0

原始代碼已被刪除,顯示新的工作代碼。代碼背後的想法是在佈局中創建一個新的textView,該佈局具有用戶提供的自定義名稱。此前,NPE錯誤正在發生。這是一個修復。有任何問題,請隨時詢問。從對話框創建按鈕時

編輯:找到該溶液

的修復需要被如下:

accountEdit = new EditText(this); // accountEdit needs to be a global variable 

然後內builder.setPositiveButton

builder.setPositiveButton(R.string.btn_save, new DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface dInterface, int whichButton) 
     { 

      LinearLayout lineLayout = (LinearLayout)findViewById(R.id.linear_layout); 

      String newAccountName = accountEdit.getText().toString(); 

      newTextView = new TextView(getBaseContext() ); 


      newTextView.setVisibility(View.VISIBLE); 
      newTextView.setText( newAccountName ); 
      newTextView.setId(id); 
      newTextView.setTextSize(35); 

      newTextView.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View view) { 
        onClickNew(view); 
       } 
      }); 
      newTextView.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View view) { 
        Toast.makeText(getBaseContext(), "Testing" , Toast.LENGTH_LONG).show(); 
        return true; 
       } 
      }); 

這將創建按鈕,如圖以及將按鈕的名稱設置爲對話框中EditText中的信息。以前,EditText來自另一項活動,並被錯誤地稱爲NPE。感謝您的幫助。

+0

在XML中是否有R.id.newAccountButton? – Catherine

+0

不看所有的代碼,我會猜測這是因爲dialog有一個視圖,所以如果你在Dialog類中調用'findViewById',它實際上調用dialogView.findViewById而不是你的activity findViewById()。 – Wenhui

回答

0

由於文輝提到,你調用按鈕的onclick監聽器中的finViewById,所以使用了錯誤的上下文。請按照以下示例進行操作:

final EditText accountEdit = (EditText)findViewById(R.id.newAccountButton); 
final String newAccountName = accountEdit.getText().toString(); 
final LinearLayout lineLayout = (LinearLayout)findViewById(R.id.linear_layout); 
builder.setPositiveButton(R.string.btn_save, new DialogInterface.OnClickListener(){ 
    public void onClick(DialogInterface dInterface, int whichButton) 
    { 
     newTextView = new TextView(getBaseContext()); 

     newTextView.setVisibility(View.VISIBLE); 
     newTextView.setText("Test"); 
     newTextView.setId(id); 
     newTextView.setTextSize(35); 

     newTextView.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       onClickNew(view); 
      } 
     }); 

     lineLayout.addView(newTextView); 
     id++; 
    } 
}); 
相關問題