2015-02-08 65 views
0

我發起一個警告對話框,當用戶啓動應用程序,就像這樣:無法取消警報對話框的Android

public class MainActivity extends ActionBarActivity { 

final Context context = this; 

private SharedPreferences mPrefs; 
private Editor mEditor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mPrefs = PreferenceManager.getDefaultSharedPreferences(context); 
    mEditor = mPrefs.edit(); 
    mEditor.apply(); 

    boolean isUsedBefore = mPrefs.getBoolean("used",false); 

    //if(isUsedBefore==false){ 
     //do nothing 
    //}else{ 
     launchDialogSex(); 
     //launchDialogBody(); 
    //} 
} 

private void launchDialogSex() { 
    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
      context); 
    final AlertDialog alert = alertDialogBuilder.create(); 

    // set title 
    alertDialogBuilder.setTitle("Körperangaben - Geschlecht") 
      .setSingleChoiceItems(R.array.sex_array, -1, new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //save chosen sex 
        String[] sex = new String[]{"male","female"}; 
        mEditor.putString("sex", sex[which]); 
        //don't open Dialog by next launch 
        mEditor.putBoolean("used", true); 
        mEditor.commit(); 

        alert.dismiss(); 

        //auto launch next Dialog 
        launchDialogBody(); 
       } 
      }); 
     alertDialogBuilder.show(); 
    } 

private void launchDialogBody() { 
    LayoutInflater factory = LayoutInflater.from(this); 
    final View textEntryView = factory.inflate(R.layout.text_entry, null); 
    //text_entry is an Layout XML file containing two text field to display in alert dialog 
    final EditText input1 = (EditText) textEntryView.findViewById(R.id.mass); 
    final EditText input2 = (EditText) textEntryView.findViewById(R.id.height); 
    final EditText input3 = (EditText) textEntryView.findViewById(R.id.age); 
    final AlertDialog.Builder alert = new AlertDialog.Builder(this); 
    //create Dialog 
    alert 
      .setTitle("Körperangaben") 
      .setView(textEntryView) 
      .setPositiveButton(R.string.alert_dialog_ok, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          Log.i("AlertDialog","TextEntry 1 Entered "+input1.getText().toString()); 
          Log.i("AlertDialog","TextEntry 2 Entered "+input2.getText().toString()); 
          Log.i("AlertDialog","TextEntry 3 Entered "+input3.getText().toString()); 
          /* User clicked OK so do some stuff */ 
          mEditor.putString("mass",input1.getText().toString()); 
          mEditor.putString("height",input2.getText().toString()); 
          mEditor.putString("age",input3.getText().toString()); 
          mEditor.commit(); 
          energieBedarf(); 
         } 
        }) 
      .setNegativeButton(R.string.alert_dialog_cancel, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 

         } 
        }); 
    //show Dialog 
    alert.show(); 
} 


public void energieBedarf(){ 
    String sex = mPrefs.getString("sex","female"); 
    String massString = mPrefs.getString("mass","65"); 
    String heightString = mPrefs.getString("height","165"); 
    String ageString = mPrefs.getString("age","25"); 

    double mass = Double.parseDouble(massString); 
    double height = Double.parseDouble(heightString); 
    int age = Integer.parseInt(ageString); 

    if(sex.equals("female")){ 
     double grundUmsatzFemale = 655.1 + (13.7 * mass) + (5 * height) - (6.8* age); 
     //TODO add PAL into calculations 
     double gesamtUmsatzFemale = (grundUmsatzFemale + (grundUmsatzFemale * (1.2-1))) + ((grundUmsatzFemale + (grundUmsatzFemale * (1.2-1)))*0.07); 

     Log.e("Ausgabe", String.valueOf(gesamtUmsatzFemale)); 

    }else{ 
     //Double grundUmsatzMale = 66.47 + (9.6 * Double.parseDouble(mass)) + (1.8*Double.parseDouble(height)) - (4.7* Integer.parseInt(age)); 
     //Double gesamtUmsatzMale = (grundUmsatzMale + (grundUmsatzMale * (1.2-1))) + ((grundUmsatzMale + (grundUmsatzMale * (1.2-1)))*0.07); 
    } 
} 

即使我跟幾個similar (for example)的問題,這似乎對提問者的工作,但我的警報對話框仍然沒有關閉。

信息:該方法在onCreate,launchDialogBody中調用,啓動另一個需要另一組身體信息的對話框。

+0

你有沒有試過'dialog.cancel();'? – 2015-02-08 16:20:41

回答

1

通過

dialog.dismiss(); 

試試這個

而不是使用

alert.dismiss(); 

替換它喜歡這張

@Override 
    public void onClick(DialogInterface dialog, int which) { 
     //save chosen sex 
     String[] sex = new String[]{"male","female"}; 
     mEditor.putString("sex", sex[which]); 
      //don't open Dialog by next launch 
      mEditor.putBoolean("used", true); 
      mEditor.commit(); 

      dialog.dismiss(); 

      //auto launch next Dialog 
      launchDialogBody(); 
    } 
+0

請嘗試讓我知道這是否解決了您的問題。 – 2015-02-08 16:36:21

+0

完成了工作,謝謝! – Adrian 2015-02-08 16:42:05

+0

不客氣,阿德里安。 – 2015-02-08 16:43:23

0

看看this

首先你創建構建器,添加按鈕,視圖等然後你叫AlertDialog dialog = builder.create();從我所看到的onClick回調甚至沒有執行。