2011-04-02 15 views
16

मेरे पास एक कस्टम संवाद है और जब मैं एक संपादन टेक्स्ट का मान प्राप्त करने का प्रयास करता हूं तो यह शून्य हो जाता है।findviewbyid एक संवाद में शून्य वापस आता है

इस लाइन रिटर्न अशक्त

EditText et = (EditText)findViewById(R.id.username_edit); 

यहाँ अपनी संपूर्णता में कोड है।

protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DIALOG_TEXT_ENTRY: 
     LayoutInflater factory = LayoutInflater.from(this); 
     final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null); 
     return new AlertDialog.Builder(TicTacToe.this) 
      //.setIconAttribute(android.R.attr.alertDialogIcon) 
      .setTitle(getTitleText()) 
      .setView(textEntryView) 
      .setPositiveButton("JOIN GAME", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        try 
        { 
         EditText et = (EditText)findViewById(R.id.username_edit); 
          playerName = et.getText().toString(); 
        } 
        catch (Exception e) 
        { 
        } 
       } 
      }) 
      .create(); 
    } 
    return null; 
} 

उत्तर

36

इस प्रयास करें:

EditText et = (EditText)textEntryView.findViewById(R.id.username_edit); 

आप को बताने के लिए है, जिसमें आईडी खोजने के लिए देखने की है। अन्यथा यह setContentView के आधार पर बढ़ाई XML लेआउट से ध्यान में रखते हुए आईडी (आमतौर पर onCreate में घोषित) की तलाश करेगा

+0

+1 ग्रेट वर्क मैन। – Jacob

+0

धन्यवाद! मेरे लिए भी काम करता है – Urbanleg

+0

धन्यवाद आपने दिन बचाया :) – orchidrudra

2

मैं एक ही समस्या है, जो खुद निम्नलिखित कोड का टुकड़ा में प्रस्तुत हो रही थी:

final Dialog dialog = new Dialog(this); 

dialog.setContentView(R.layout.addbank_dialog); 
dialog.show(); 

Button btnSaveBank = (Button)dialog.findViewById(R.id.btnSaveBank); 

final EditText etBankName = (EditText)dialog.findViewById(R.id.etBankName); 

btnSaveBank.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     try{ 
      String bank = etBankName.getText().toString(); 
      SharedCommonData.dbOps.saveBankInDB(bank); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
     Toast.makeText(SharedCommonData.context, "Bank Saved", Toast.LENGTH_SHORT); 
     refreshBanks(); 
     dialog.dismiss(); 
    } 
}); 

etBankName शून्य मूल्य लौटा रहा था, लेकिन फिर मैंने dialog.findviewbyid(R.id.etBankName) का उपयोग किया और यह काम किया।

20

मेरे मामले में: सबसे पहले मैं

dialog.show(), कॉल करना होगा

और यह होने के बाद ही मैं

dialog.findviewById का उपयोग करने में सक्षम था (R.id.myID)।

यदि मैं शो() को कॉल करने से चूक गया, तो मुझे findViewByID के साथ एक शून्य वापस मिल गया।

+1

यह पूरी तरह से 'AlertDialog.Builder.create() 'के विपरीत है, और यह भी पूरी तरह से सही है। असल में, यहां तक ​​कि यदि आप शून्य को कम नहीं करते हैं, तो बस 'findViewById' कहलाता है, जब आप आखिरकार' शो() 'कॉल करते हैं तो एक अलग अपवाद फेंक दिया जाएगा। धन्यवाद। – benkc

+0

यह बहुत अजीब है ... और जिस तरह से डिवाइस-निर्भर है। मैंने 'Dialog.shindViewById()' को कॉल करने से पहले 'Dialog.findViewById() 'का उपयोग किया है और यह काम किया है। – Bondax

6

मुझे एक ही समस्या का सामना करना पड़ा। मेरे मामले में, मेरे पास कस्टम लेआउट के साथ एक संवाद था और इस लेआउट में एक रेडियो बटन था। इसे हल करने के लिए, मैंने अनुवर्ती कोड का उपयोग किया:

View dialogLayout = factory.inflate(R.layout.dialog_layout, null); 
AlertDialog.Builder dialog = new AlertDialog.Builder(context); 
dialog.setView(dialogLayout); 

RadioButton radiobt = (RadioButton) dialogLayout.findViewById(R.id.radioBt); 
संबंधित मुद्दे