2016-01-22 62 views
-1

我试图让两个AlertDialog两个一个接一个地出现。一个用于获取用户名和另一个用于获取密码。所以,当我运行这个时,我遇到了应用程序崩溃。我对Android Studio颇为陌生。这是我的代码。如何让两个AlertDialog在Android Studio中一个接一个出现?

AlertDialog.Builder builder1 = new AlertDialog.Builder(this); 
      final AlertDialog.Builder builder2 = new AlertDialog.Builder(this); 
      final EditText text = new EditText(this); 

      builder1.setTitle("Username").setMessage("Please enter your name.").setView(text); 
      builder1.setPositiveButton("Apply", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface di, int i) { 
        final String name_from_alert = text.getText().toString(); 
       } 
      }); 
      // disables outside touch cancel 
      builder1.setCancelable(false); 
      builder1.create().show(); 


      // getting password 
      builder2.setTitle("Password").setMessage("Please enter a password").setView(text); 
      builder2.setPositiveButton("Apply", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface di, int i) { 
        final String password_from_alert = text.getText().toString(); 
       } 
      }); 
      // disables outside touch cancel 
      builder2.setCancelable(false); 
      builder2.create().show(); 

任何帮助表示赞赏。提前致谢。

+1

1.什么是崩溃?你忘了你的logcat。 2.为什么不在同一个对话框中询问用户名和密码?这通常是如何完成的。 – 323go

+0

糟糕。抱歉。我肯定会在未来的混乱中附加logcat。并感谢提示。是啊!就这样做了。谢谢。 :) – lU5er

回答

0

以自定义布局您的对话框:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="#056FB4"> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"> 

    <EditText 
     android:id="@+id/edUsername" 
     android:layout_width="150dp" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="20dp" 
     android:hint="Enter Username" 
     android:imeOptions="actionDone" 
     android:inputType="textCapSentences|textPersonName" 
     android:capitalize="sentences" 
     android:maxLength="20" 
     android:padding="13dp" 
     android:scrollHorizontally="false" 
     android:singleLine="true" 
     android:textColor="@color/colorWhite" 
     android:textColorHint="#c2b098" 
     android:textSize="12dp" 
     android:textStyle="bold" /> 
<EditText 
     android:id="@+id/edPassword" 
     android:layout_width="150dp" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="20dp" 
     android:hint="Enter Password" 
     android:imeOptions="actionDone" 
     android:inputType="textPassword" 
     android:capitalize="sentences" 
     android:maxLength="20" 
     android:padding="13dp" 
     android:scrollHorizontally="false" 
     android:singleLine="true" 
     android:textColor="@color/colorWhite" 
     android:textColorHint="#c2b098" 
     android:textSize="12dp" 
     android:textStyle="bold" /> 
    <Button 
     android:text="Ok" 
     android:textSize="15dp" 
     android:textColor="@color/colorWhite" 
     android:id="@+id/btnOk" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/edBoxName" 
     android:layout_centerHorizontal="true" 
     android:layout_margin="20dp" 
     android:gravity="center" 
     android:textAllCaps="false" /> 
</RelativeLayout> 

的Java文件:

public void openDialog() { 
    final Dialog dialog = new Dialog(MainActivity.this); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.custom_dialog); 
    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 
    final EditText edUsername = (EditText) dialog.findViewById(R.id.edUsername); 
    final EditText edPassword = (EditText) dialog.findViewById(R.id.edPassword); 
    Button btnDissmissDialog = (Button) dialog.findViewById(R.id.btnOk); 
    btnDissmissDialog.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (dialog != null) { 
       if (dialog.isShowing()) { 
         String strUsername = edUsername.getText().toString().trim(); 
         String strPasswird = edPassword.getText().toString().trim(); 
         dialog.dismiss(); 
       } 
      } 
     } 
    }); 
    dialog.show(); 
} 
+0

非常感谢。这是完成这个任务的完美方式。 :) – lU5er

0

您可以创建一个类,然后扩展DialogFragment类,然后重写它的OnCreateDialog()方法,然后创建一个静态方法来创建实例并传递参数。

的OnCreateDialog

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 
//set title,message or view .... 

// when you done 
return dialog.create(); 
} 

静态方法把参数(静态工厂模式设计)

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

然后,你可以使用这样的

DialogFragment dialog = CustomAlertDialog.newInstance("titulo","message"); 
dialog.show(/* etc.. */); 
相关问题