2012-04-23 12 views
5

क्या एक से अधिक डायलॉग एक दूसरे को दिखाना संभव है? क्या संवाद जेड-लेवल की तरह कुछ है? मैं डायलॉगफ्रैगमेंट का उपयोग कर रहा हूं जहां उपयोगकर्ता तत्व चुनता है, जब वह अपनी पसंद को पूरा करता है, तो यह डेटाबेस में सहेजा जाता है और सर्वर पर भेजा जाता है। यदि सहेजने की क्रिया विफल हो जाती है तो मैं उपयोगकर्ता को सूचित करना चाहता हूं ... एक और संवाद यह संभव है? और क्या यह मेरे पहले संवाद को दूर नहीं करेगा? अग्रिम धन्यवाद।एंड्रॉइड: क्या मैं एक से अधिक संवाद एकाधिक दिखा सकता हूं? क्या संवाद जेड-लेवल की तरह कुछ है?

उत्तर

4

वास्तव में, एक दूसरे के अंदर एक से अधिक संवाद टुकड़े दिखाने के लिए संभव है। जेड-ऑर्डर उनके द्वारा बनाए गए क्रम पर निर्भर करता है।

नीचे दिए गए कोड में आपको आवश्यक व्यवहार के साथ फ्रैगमेंट एक्टिविटी का एक उदाहरण दिया गया है।

public class MyActivity extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     //...  
    } 

    public void onSave(View view) { 
     Intent intent = getIntent(); 

     this.setResult(RESULT_OK, intent); 
     finish(); 
    } 

    public void onCancel(View view) { 
     finish(); 
    } 

    public void SelectWeekDay(View view) { 
     DialogFragment selectWeekDayFragment = new SelectWeekDayFragment(); 
     selectWeekDayFragment.show(getSupportFragmentManager(), "WeekDayDialog"); 
    } 

    public class SelectWeekDayFragment extends DialogFragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.week_day_dialog, container, true); 

      Button saveButton = (Button) view.findViewById(R.id.button_save); 
      saveButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 
        CheckBox checkboxMonday = (CheckBox) getDialog().findViewById(R.id.checkBox_monday); 
        if (!checkboxMonday.isChecked()) { 
         DialogFragment saveErrorFragment = new SaveErrorFragment(); 
         saveErrorFragment.show(getSupportFragmentManager(), "SaveErrorFragment"); 
        } 
        else { 
         SaveToDb(); //Perform actions to store on db or what you wish 
         dismiss(); 
        } 
       } 
      }); 

      Button cancelButton = (Button) view.findViewById(R.id.button_cancel); 
      cancelButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        dismiss(); 
       } 
      }); 

      return view;  
     } 
    } 

    public class SaveErrorFragment extends DialogFragment { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      return new AlertDialog.Builder(getActivity()) 
      .setMessage("You must select Monday").setPositiveButton("Ok", null).create(); 
     } 
    } 
} 
1

मेरी सलाह है कि आप अपने संवाद के अंदर एक व्यूफ्लिपर के साथ कस्टम लेआउट का उपयोग करें ताकि आप आसानी से प्रगति-बार या जो भी अलग-अलग लेआउट दिखाना चाहते हैं, के बीच स्विच कर सकें। यदि आप एकाधिक संवाद दिखाना चाहते हैं तो मेरा अनुमान यह है कि ज़ेड-ऑर्डर उस क्रम पर निर्भर करता है जिसे वे शीर्ष पर दिखाए गए नवीनतम मधुमक्खी बनाते थे।

0

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

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

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