大家好我需要一些帮助我创建了一个自定义alertdialog,它接受用户输入,如用户名和密码。我跟着the android developers site我想要做的是,一旦用户输入用户名和密码并按下alertdialog中的登录按钮,我想将这些值显示给创建对话框的活动。我被困在这浪费了3个小时。任何帮助将非常感激。这是我的代码。
MainActivity.java
public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{
private Button dialogButton;
private Button customDialogButton;
private TextView customDialogTextview;
private Button dialogWithInterface;
private EditText dialogUsername;
private EditText dialogPassword;
String username;
String password;
public void showNoticeDialog() {
// Create an instance of the dialog fragment and show it
DialogFragment dialog = new NoticeDialogFragment();
dialog.show(getFragmentManager(), "NoticeDialogFragment");
}
// The dialog fragment receives a reference to this Activity through the
// Fragment.onAttach() callback, which it uses to call the following methods
// defined by the NoticeDialogFragment.NoticeDialogListener interface
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
// User touched the dialog's positive button
}
@Override
public void onDialogNegativeClick(DialogFragment dialog) {
// User touched the dialog's negative button
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
customDialogTextview = (TextView)findViewById(R.id.customdialogtext);
customDialogTextview.setText("Email and Password: ");
dialogButton = (Button)findViewById(R.id.dialogbutton);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1. Instantiate an AlertDialog.Builder with its constructor
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
// Add the buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// User clicked OK button
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// User cancelled the dialog
}
});
// 2. Chain together various setter methods to set the dialog characteristics
builder.setMessage("hello")
.setTitle("Dialog");
// 3. Get the AlertDialog from create()
AlertDialog dialog = builder.create();
dialog.show();
}
});
customDialogButton = (Button)findViewById(R.id.customdialogbutton);
customDialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
// Get the layout inflater
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.dialog, null));
builder.setPositiveButton("Sign In", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//sign in the user
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
});
dialogWithInterface = (Button)findViewById(R.id.dialogwithinterface);
dialogWithInterface.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNoticeDialog();
}
});
}
NoticeDialogFragment.java
public class NoticeDialogFragment extends DialogFragment {
/* The activity that creates an instance of this dialog fragment must
* implement this interface in order to receive event callbacks.
* Each method passes the DialogFragment in case the host needs to query it. */
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogNegativeClick(DialogFragment dialog);
}
// Use this instance of the interface to deliver action events
NoticeDialogListener mListener;
// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the NoticeDialogListener so we can send events to the host
mListener = (NoticeDialogListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement NoticeDialogListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Build the dialog and set up the button click handlers
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog, null));
builder.setPositiveButton("Sign In", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the positive button event back to the host activity
mListener.onDialogPositiveClick(NoticeDialogFragment.this);
Toast.makeText(getActivity(), "positive", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the negative button event back to the host activity
mListener.onDialogNegativeClick(NoticeDialogFragment.this);
}
});
return builder.create();
}
}
答案 0 :(得分:2)
查看您的活动实施的此方法:
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
// User touched the dialog's positive button
}
它是您在名为NoticeDialogListener的对话框中创建的自定义界面的一部分,是您希望对话框与调用它的活动进行通信的方式。
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogNegativeClick(DialogFragment dialog);
}
更改此设置,以便onDialogPostiveClick看起来像:
public void onDialogPositiveClick(String name, String password);
并在单击按钮时将EditText中的值传递给调用:
builder.setPositiveButton("Sign In", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the positive button event back to the host activity
mListener.onDialogPositiveClick(mNameEdit.getText().toString(), mPasswordEdit.getText().toString());
}
});
下一步是对你在onDialogPositiveClick()方法的活动中覆盖的方法中的名称和密码值做任何你想做的事。
@Override
public void onDialogPositiveClick(String name, String password) {
//do something with name and password here?
}
这似乎是您想要对现有代码执行操作的最简单方法。