2011-04-14 16 views
12

मैं किसी अन्य संवाद के बटन के ऑनक्लिक श्रोता से एक संवाद प्रदर्शित करने का प्रयास कर रहा हूं, लेकिन दूसरा संवाद प्रदर्शित नहीं होगा। मैंने एक समान समस्या की खोज की और पाया- Dialogs order in Android, प्रदान किए गए समाधान की कोशिश की, लेकिन यह भी काम नहीं करता है।एंड्रॉइड एक संवाद से एक और संवाद प्रदर्शित करता है

मेरा कोड उत्तर में दिए गए एक जैसा ही है।

सार्वजनिक शून्य onClick (DialogInterface संवाद, पूर्णांक आईडी) { showDialog (SECOND_DIALOG); dialog.dismiss(); }

किसी भी मदद की वास्तव में सराहना की जाएगी।

धन्यवाद,

अक्षय

उत्तर

8

यह मैं इसे कैसे कर रहा हूँ है:

if (!appPrefs.getAcceptedUsageAggrement()) { 
     tracker.trackPageView("/UsageAgreementDialog"); 
     acceptedUsage_alertDialog = new AlertDialog.Builder(BroadcastSMSActivity.this) 
     .setTitle(R.string.accept_usage_title) 
     .setMessage(R.string.accept_usage_message) 
     .setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       finish(); 
      } 
     }) 
     .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       if (appPrefs.getAppVer().equals("")) { 
        tracker.trackEvent("Application", "Install", getAppVerName(), 1); 
       } else { 
        tracker.trackEvent("Application", "Upgrade", appPrefs.getAppVer().toString()+"->"+getAppVerName(), 1); 
       } 
       displayRecentChanges = true; 
       appPrefs.saveAppVer(getAppVerName()); 
       appPrefs.saveAcceptedUsageAggrement(true); 
      // Display Recent Changes on 1st use of new version 
       if (displayRecentChanges) { 
        tracker.trackPageView("/RecentChangesDialog"); 
        recentChanges_alertDialog = new AlertDialog.Builder(BroadcastSMSActivity.this) 
        .setTitle(getString(R.string.changes_title, getAppVerName())) 
        .setMessage(R.string.changes_dialog) 
        .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          recentChanges_alertDialog.cancel(); 
          acceptedUsage_alertDialog.cancel(); 
         } 
        }) 
        .create(); 
        recentChanges_alertDialog.show(); 
       } 
      } 
     }) 
     .create(); 
     acceptedUsage_alertDialog.show(); 
    } 
+1

धन्यवाद बिल! यह काम! स्पष्ट रूप से गतिविधि संदर्भ के शो को कॉल करना Dialog() नहीं करता है। – Akshay

+0

मुझे यकीन नहीं है कि मैंने स्वीकार किया है Usage_alertDialog.cancel(); सही जगह पर, लेकिन मैं आपको बता सकता हूं कि जब मैंने इसे क्लिक() पर रद्द कर दिया और फिर बाद के संवाद को बनाने की कोशिश की तो यह एक बल को बंद कर दिया। तो, दूसरे संवाद के रद्द होने के बाद बस इसे (cancel() को स्थानांतरित करने के लिए मेरे लिए प्राकृतिक लग रहा था। –

+0

आप वहां कुछ शानदार Google Analytics युक्तियां भी नोट कर सकते हैं ... मैं रिकॉर्ड कर रहा हूं कि एप्लिकेशन का यह रन एक नई स्थापना या अपग्रेड था। यदि यह एक अपग्रेड है, तो मैं उनके द्वारा आने वाले संस्करण को रिकॉर्ड कर रहा हूं और संस्करण स्थापित किया जा रहा है: 1.5-> 1.8, आदि –

1

मेरे सुझाव इस कोड है। डायलॉग 1 में बटन क्लिक करते समय एक बटन होता है तो डायलॉग 2 कॉल करेगा।

private Dialog dialog; 
    private AlertDialog.Builder voteBuilder; 

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState);  

    // Firat dialog 
      dialog = new Dialog(QrCodeReader.this); 
      dialog.setContentView(R.layout.customdialog_qr); 
      dialog.setCancelable(false); 

    // Second dialog 
      showVotingDialog(); 

    //set up button of dialog 1 
      Button btnVote = (Button) dialog.findViewById(R.id.btnVote); 
      btnVote.setOnClickListener(new OnClickListener() { 
      @Override 
       public void onClick(View v) { 
        dialog.dismiss(); 
        voteBuilder.show(); 
       } 
      }); 

dialog.show(); 
    } 

    private void showVotingDialog() { 
      voteBuilder = new AlertDialog.Builder(this); 
      voteBuilder.setTitle(R.string.votingdialog_title); 
      voteBuilder.setCancelable(false); 
      LayoutInflater inflater = getLayoutInflater(); 
      final View checkboxLayout = inflater.inflate(R.layout.voting_dialog, null); 
      voteBuilder.setView(checkboxLayout); 
      voteBuilder.setPositiveButton(R.string.menu_ok, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        RadioGroup radioGroup = (RadioGroup) checkboxLayout.findViewById(R.id.vote_radiogroup); 
        int checkedRadioButton = radioGroup.getCheckedRadioButtonId(); 
        int radioButtonSelected = 0; 
        switch (checkedRadioButton) { 
         case R.id.vote_item1 : radioButtonSelected = 1; break; 
         case R.id.vote_item2 : radioButtonSelected = 3; break; 
         case R.id.vote_item3 : radioButtonSelected = 5; break; 
         case R.id.vote_item4 : radioButtonSelected = 10; break; 
         case R.id.vote_item5 : radioButtonSelected = 20; break; 
         default: radioButtonSelected = 0; 
        } 

        sendVoteBySMS(radioButtonSelected); 
       } 
      }); 
      voteBuilder.setNegativeButton(R.string.menu_cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        QrCodeReader.this.finish(); 
       } 
      }); 

      voteBuilder.create(); 
    //  voteBuilder.show(); 
     } 
5

मुझे पता है कि यह थोड़ी देर पहले पूछा गया था लेकिन यहां मुझे एक सुंदर साफ समाधान मिला है।

मैं इस तरह एक अंतरफलक को परिभाषित:

public interface OpenDialog { 

public void showDialog(DialogFragment dialog); 

} 

कौन सा मेरी गतिविधि तो औजार, संवाद जब इसे खोला है, मेरे InterfaceHolder वर्ग का उपयोग करने के अपने आप के लिए एक संदर्भ गुजर:

public class MyActivity extends FragmentActivity implements OpenDialog { 

@Override 
protected void onCreate(Bundle arg0) { 
    super.onCreate(arg0); 

    InterfaceHolder.set(this);   
    showDialog(new DialogOne()); 

} 

public void showDialog(DialogFragment dialog) { 
    dialog.show(getSupportFragmentManager(), "tag"); 
} 

InterfaceHolder है इंटरफ़ेस के स्थिर संदर्भ वाला केवल एक वर्ग जिसका उपयोग मैं इसे पास करने के लिए करता हूं:

public class InterfaceHolder { 
private static OpenDialog openDialog; 

public void set(OpenDialog openDialog) 
    this.openDialog = openDialog; 
} 

public void get() 
    return openDialog; 
} 

तो शोडियलॉग विधि उस संवाद को प्रदर्शित करेगी जिसमें मैं इसे पास करता हूं; जैसा कि आप देख सकते हैं, मैं संवाद को प्रदर्शित करने के लिए ऐसा करता हूं। अब, अगर मैं "DialogTwo" अंदर "DialogOne" नामक एक नया संवाद खोलने के लिए चाहते हैं मैं इसे लिखित रूप से कॉल कर सकते हैं:

InterfaceHolder.get().showDialog(new DialogTwo()); 
dismiss(); 

और देखा, DialogTwo दिखाया गया है। जाहिर है, आपको यह सुनिश्चित करने के लिए सावधान रहना होगा कि आपकी गतिविधि का संदर्भ इंटरफ़ेसहोल्डर को पास कर दिया गया है (ऐसा करने का एक अच्छा तरीका InterfaceHolder.set (this); showDialog विधि के अंदर रखना है), लेकिन अन्यथा यह काम करने लगता है खूबसूरती से।

-3

डायलॉग पर बस छुपाएं और दिखाएं क्लिक करें

+0

कृपया इसके लिए टिप्पणी जोड़ें। इसके लिए उत्तर देने की कोई ज़रूरत नहीं है –

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