2012-12-03 21 views
5

मैंने एक फ़ंक्शन लिखा है जिसमें टाइप int का रिटर्न वैल्यू है, और इस फ़ंक्शन में मुझे दो बटन के साथ अलर्टडिअलॉग पॉप अप करने की आवश्यकता है। जब "हां" बटन क्लिक किया जाता है, तो फ़ंक्शन 0, और "नहीं" बटन लौटाता है -1।एक फ़ंक्शन में AlertDialog जिसमें वापसी मूल्य

public int Func(){ 
    final AlertDialog d=new AlertDialog.Builder(mContext).setTitle("Warning").setCancelable(false).setMessage 
         (alert) 
         .setPositiveButton("Yes",mListener).setNegativeButton("No",mListener).create(); 
         d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
         d.show(); 
    if(mWhich.getWhich()==-1) //the "yes" button was clicked 
     return 0; 
    else      //the "no" button was clicked 
     return -1; 
} 

mWhich उपयोगकर्ता विकल्पों

private DialogInterface.OnClickListener mListener = 
      new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) { 
        mWhich.setWhich(which); 
          } 
      }; 

रिकॉर्ड करने के लिए प्रयोग किया जाता है एक वर्ग अब समस्या कोड उपयोगकर्ता हाँ या ना बटन पर क्लिक करें इससे पहले कि

if(mWhich.getWhich()==-1) 
     return 0; 
    else 
     return -1; 

मार डाला गया था है, कैसे है क्या मुझे करना चाहिए??

+0

जब आप वर्तमान कोड –

+0

चलाते समय हाँ या कोई बटन दबाया जाता है तो आप क्या प्राप्त कर रहे हैं वैश्विक स्तर पर एक पूर्णांक चर लेते हैं और इसमें मान निर्दिष्ट करते हैं (0 या 1) और बाद में इसका मूल्य चेक करें। –

+1

अलर्ट संवाद मोडल नहीं है। – Doomsknight

उत्तर

0

मुझे नहीं लगता कि यह संभव है कि आप ऐसा करें क्योंकि Func() उपयोगकर्ता को बटनों में से किसी एक पर क्लिक करने से पहले निष्पादित करना समाप्त हो जाएगा। निष्पादन समाप्त होने के बाद विधि के वापसी मूल्य को बदलना असंभव होगा।

चूंकि आप पहले ही which को mWhich.setWhich(which); का उपयोग कर संग्रहित कर रहे हैं। आप बाद में किसी अन्य फ़ंक्शन का उपयोग करके मान पढ़ सकते हैं।

private DialogInterface.OnClickListener mListener = new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     mWhich.setWhich(which); 
    } 
}; 

public void showDialog() { 
    final AlertDialog d = new AlertDialog.Builder(mContext).setTitle("Warning") 
      .setCancelable(false).setMessage(alert).setPositiveButton("Yes", mListener) 
      .setNegativeButton("No", mListener).create(); 
    d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
    d.show(); 
} 

public int func() { 
    if (mWhich.getWhich() == -1) 
     // the "yes" button was clicked 
     return 0; 
    else 
     // the "no" button was clicked 
     return -1; 
} 
+0

आपके उत्तर के लिए धन्यवाद। लेकिन मुझे नहीं लगता कि यह काम करता है। क्योंकि बटन क्लिक होने पर मैं मूल्य को पढ़ना चाहता हूं – Caroline

+0

@zhouqihui आप वास्तव में क्या करने की कोशिश कर रहे हैं? यदि आप हमें बता सकते हैं, तो मुझे लगता है कि समुदाय बेहतर समाधान के साथ आ सकता है। –

+0

मैं "हां" या "नहीं" के उपयोगकर्ता विकल्प के आधार पर Func() के वापसी मूल्य का निर्णय लेना चाहता हूं। AlertDialog पॉप अप करने और उपयोगकर्ता विकल्पों के आधार पर निर्णय दोनों Func() में हैं। Func() में, मैं पहले कुछ करता हूं और परिणाम प्राप्त करता हूं, फिर मैं उस परिणाम को उपयोगकर्ता को अलर्टडिअलॉग पर "हां" और "नहीं" बटन के साथ प्रस्तुत करता हूं। जब उपयोगकर्ता "हां" पर क्लिक करता है, तो Func() 0 देता है, "नहीं" रिटर्न -1। – Caroline

2

के रूप में मैं समझ गया, अपने कोड

// some code 
int result = Func(); 
DoSmthWithResult(result); 
// some code 

आपका Func के समान दिखता है, यूआई धागा पर चल रहा है तो बाद आप इसे क्रियान्वित जारी संवाद बनाएं और mWich की प्रारंभिक मान देता है। आप onClickListener बजाय से DoSmthWithResult बुलाना चाहिए:

private DialogInterface.OnClickListener mListener = new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     DoSmthWithresult(which == -1 ? 0 : -1); 
    } 
}; 

अब DoSmthWithResult उपयोगकर्ता दबाया "हाँ" या "नहीं" बटन के बाद निष्पादित किया जाएगा।

+0

आपके उत्तर के लिए धन्यवाद। लेकिन मैं DoSmthWithresult नहीं डाल सकता (जो == -1? 0: -1); ऑनक्लिक फ़ंक्शन में, क्योंकि मैंने कई स्थानों पर Func() को कॉल किया है, और बाद में ऑपरेशन इन स्थानों में अलग है। – Caroline

0

हालांकि यह निश्चित रूप से श्रोता का उपयोग करने के लिए एंड्रॉइड तरीका है और क्लिक पर एक नया कॉल पदानुक्रम शुरू करता है (जैसा यूरी और बिनॉय प्रस्तावित है), अवरोधक संवाद प्राप्त करना आवश्यक हो सकता है। मुझे एहसास हुआ कि अपने नए लूपर के साथ एक नया थ्रेड शुरू करके जो संवाद प्रदर्शित करता है। इस तरह ui धागा चलाने के लिए स्वतंत्र है, लेकिन परिणामस्वरूप एएनआर नहीं होता है।

0

मैं पुष्टि संवाद को दिखाने के लिए ही कार्यक्षमता की जरूरत है, और यहां मेरे समाधान नहीं है:

आपका Func() इस तरह से मेरी messageDialog() की तरह हो सकता है:

public static void messageDialog(Context context, String title, String bt_ok, String bt_cancel, final Runnable if_ok, final Runnable if_cancel) { 

     AlertDialog.Builder alert = new AlertDialog.Builder(context); 

     alert.setTitle(title); 

     alert.setPositiveButton(bt_ok.toUpperCase(), 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 

         if(if_ok!=null) if_ok.run(); 

        } 
       }); 
     alert.setNegativeButton(bt_cancel.toUpperCase(), 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 

         if(if_cancel!=null) if_cancel.run(); 

        } 
       }); 

     alert.show(); 

    } 

और इस तरह से पर messageDialog() फोन:

Runnable ifTrue = new Runnable() { 
     @Override 
     public void run() { 
      //put here your YES onClick stuff 
     } 
    }; 

    String msg = "Do you really want to do this?"; 

    ALITEC.Dialogs.messageDialog(this, msg, "Yes", "No", ifTrue, null); 

कोई बटन क्लिक नहीं, मैं कुछ भी नहीं कर रहा था ...लेकिन अगर आप चाहते हैं:

Runnable ifFalse = new Runnable() { 
     @Override 
     public void run() { 
      //put here your NO onClick stuff 
     } 
    }; 

और फिर फोन

messageDialog (यह, संदेश, "हाँ", "नहीं", ifTrue, ifFalse);

बजाय

messageDialog (यह, संदेश, "हाँ", "नहीं", ifTrue, नल);

यह सब कुछ है!

सर्वश्रेष्ठ संबंध!

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