2013-04-10 94 views
0

我想從對話中獲取返回值並繼續獲取NPE。我有一個在屏幕上有按鈕的活動。點擊按鈕時,會彈出一個有幾個字段的模式來填寫。當我嘗試將信息返回到主要活動時,我的NPE爆炸了。代碼如下:Android中的對話框中的空指針異常

public class FilterActivity extends Activity { 
    final Context context = this; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_filter); 

     Button addFilter = (Button) findViewById(R.id.addFilter); 
     addFilter.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       final EditText et = (EditText) findViewById(R.id.filterName);    
       LayoutInflater inflater = LayoutInflater.from(context); 
       View dialog_layout = inflater.inflate(
         R.layout.dialog_create_filter, null); 
       AlertDialog.Builder db = new AlertDialog.Builder(
         FilterActivity.this); 
       db.setView(dialog_layout); 

       db.setTitle("Create Filter"); 
       db.setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface d, int which) {  
           et.getText().toString(); 
          } 
         }); 
       db.show(); 
      } 
     }); 
     } 
    } 

當我嘗試從中取出值時,EditText(et)仍然爲空。我究竟做錯了什麼?謝謝。

+0

顯示logcat的輸出! – 2013-04-10 09:49:30

+0

請發佈您的對話框的XML。 – 2013-04-10 09:49:36

+0

你有沒有檢查過你編輯edittext的ID是否在activity_filter佈局中可用 – AAnkit 2013-04-10 09:50:26

回答

1

你必須添加db.findViewById(R.id.filterName);像下面

final EditText et = (EditText) db.findViewById(R.id.filterName); 

insted的的

final EditText et = (EditText) findViewById(R.id.filterName); 

全碼:

   LayoutInflater inflater = LayoutInflater.from(context); 
       View dialog_layout = inflater.inflate(
         R.layout.dialog_create_filter, null); 
       AlertDialog.Builder db = new AlertDialog.Builder(
         FilterActivity.this); 

       db.setView(dialog_layout); 
       final EditText et = (EditText) db.findViewById(R.id.filterName); 

       db.setTitle("Create Filter"); 
       db.setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface d, int which) {  
           et.getText().toString(); 
          } 
         }); 
       db.show(); 
+0

實際上,沒有附加到Builder的方法findViewById,但我可以創建一個對話框並使用findViewById來獲取我的EditText。非常棒。謝謝。 – jhamm 2013-04-10 10:13:19

0

哪裏R.id.filterName位於何處?

它位於dialog_create_filter中嗎?

然後,只有在您填充對話框並使用dialog_layout視圖作爲父級後,才應該調用findViewById。

也到這裏看看: Android 「Best Practice」 returning values from a dialog

希望這有助於亞龍