2013-01-25 18 views
33

यह DialogFragment कार्यान्वयन का कारण बनता है एकIllegalStateException

IllegalStateException ("आप संवाद के OnCancelListener या OnDismissListener सेट नहीं कर सकता")

("आप संवाद के OnCancelListener या OnDismissListener सेट नहीं कर सकता")। क्यूं कर? उपाय?

public class OkCThreadDialog1 extends DialogFragment{ 

DialogInterface.OnCancelListener onCancelListener; 

public OkCThreadDialog1(){ 
} 

public static OkCThreadDialog1 newInstance(String title, String message) { 
    OkCThreadDialog1 frag = new OkCThreadDialog1(); 
    Bundle args = new Bundle(); 
    args.putString("title", title); 
    args.putString("message", message); 
    frag.setArguments(args); 
    return frag; 
} 


public Dialog onCreateDialog(Bundle savedInstanceState){ 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 


    builder .setTitle(getArguments().getString("title")) 
      .setMessage(getArguments().getString("message")) 
      .setOnCancelListener(onCancelListener) 
      .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
       }}) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        getDialog().cancel(); 
       }}); 

    return builder.create(); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    // Verify that the host activity implements the callback interface 
    try { 
     onCancelListener = (DialogInterface.OnCancelListener) activity; 
    } catch (ClassCastException e) { 
     // The activity doesn't implement the interface, throw exception 
     throw new ClassCastException(activity.toString() 
       + " must implement OkCancelDialogListener"); 
    } 
} 
} 

मेरी गतिविधि DialogInterface.OnCancelListener पालन लागू करता है:

public class MainActivity extends Activity implements OkCancelDialogListener{ 

static final String TAG ="MainActivity"; 

@Override 
public void onCancel(DialogInterface dialog) { 


} 
} 

Exeception builder.create(); से फेंक दिया है। क्या गलत है?

उत्तर

84

Android दस्तावेज़ से:

सार्वजनिक संवाद onCreateDialog (बंडल savedInstanceState)

का निर्माण करने की अवहेलना अपने अपने कस्टम संवाद कंटेनर। यह आमतौर पर एक सामान्य संवाद के बजाय अलर्टडिअलॉग दिखाने के लिए उपयोग किया जाता है; ऐसा करने पर, क्रिएटिव्यू (लेआउट इन्फ्लेटर, व्यू ग्रुप, बंडल) को कार्यान्वित करने की आवश्यकता नहीं है क्योंकि अलर्टडियलोग अपनी सामग्री का ख्याल रखता है।

इस विधि को क्रेट (बंडल) और पर क्रिएटिव्यू (लेआउट इन्फ्लेटर, व्यू ग्रुप, बंडल) के बाद बुलाया जाएगा। डिफ़ॉल्ट कार्यान्वयन बस एक संवाद वर्ग को तुरंत चालू करता है और देता है।

नोट: डायलॉग फ्रैगमेंट का Dialog.setOnCancelListener और Dialog.setOnDismissListener कॉलबैक का मालिक है। आपको उन्हें स्वयं सेट नहीं करना चाहिए।

इन घटनाओं के बारे में जानने के लिए, onCancel (DialogInterface) और onDismiss (DialogInterface) ओवरराइड।

तो मूल रूप से, आप onDismiss या '.setOnCancelListener (onCancelListener)' के स्थान पर OnCancel ओवरराइड चाहिए।

+1

इसके लिए धन्यवाद। यह स्वीकार्य उत्तर होना चाहिए। –

0

आपने अपने निर्माता के लिए एक संवाद के लिए ऑनकैनल लिस्टनर सेट किया है।

public Dialog onCreateDialog(Bundle savedInstanceState){ 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder .setTitle(getArguments().getString("title")) 
     .setMessage(getArguments().getString("message")) 
     .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
      }}) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       getDialog().cancel(); 
      }}); 

    Dialog dialog = builder.create(); 
    dialog.setOnCancelListener(onCancelListener); 
    return dialog; 
} 
+2

बस की कोशिश की .. यह वैसे भी काम करता है नहीं करता है! – user1709805

+0

यह मेरे लिए भी काम नहीं करता है। मैंने अभी स्वीकार्य उत्तर में समाधान का उपयोग किया। – Micer

-3

इस कोड को मैं आशा है कि यह काम हो जाएगा की कोशिश करो ..

AlertDialog.Builder builder = new AlertDialog.Builder(
      class_name.this); 
    builder.setTitle("Title");  
    AlertDialog dialog = builder.create(); 
    dialog.setButton("ok", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) {    

    }); 


    dialog.setButton2("Cancel", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 


      dialog.cancel(); 

     } 
    }); 
    dialog.show(); 
4

आप इस कोशिश कर सकते हैं:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle("Title"); 
    builder.setMessage("Message"); 
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // do something positive 
     } 
    }); 
    return builder.create(); 
} 

@Override 
public void onCancel(DialogInterface dialog) { 
    // do something 
} 

आशा है कि यह मदद कर सकते हैं ...

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^