感谢 Luksprog,我找到了解决方案。
AuthenticationDialog.java:
public class AuthenticationDialog extends DialogFragment implements OnClickListener {
public interface AuthenticationDialogListener {
void onAuthenticationLoginClicked(String username, String password);
void onAuthenticationResetClicked(String username);
}
private AuthenticationDialogListener mListener;
private EditText mUsername;
private EditText mPassword;
private Button mReset;
private Button mLogin;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.authentication_dialog, container);
this.getDialog().setTitle(R.string.login_title);
mUsername = (EditText) view.findViewById(R.id.username_field);
mPassword = (EditText) view.findViewById(R.id.password_field);
mReset = (Button) view.findViewById(R.id.reset_button);
mLogin = (Button) view.findViewById(R.id.login_button);
mReset.setOnClickListener(this);
mLogin.setOnClickListener(this);
return view;
}
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 = (AuthenticationDialogListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement AuthenticationDialogListener");
}
}
public void onClick(View v) {
if (v.equals(mLogin)) {
if (mUsername.getText().toString().length() < 1 || !mUsername.getText().toString().contains("@")) {
Toast.makeText(getActivity(), R.string.invalid_email, Toast.LENGTH_SHORT).show();
return;
} else if (mPassword.getText().toString().length() < 1) {
Toast.makeText(getActivity(), R.string.invalid_password, Toast.LENGTH_SHORT).show();
return;
} else {
mListener.onAuthenticationLoginClicked(mUsername.getText().toString(), mPassword.getText().toString());
this.dismiss();
}
} else if (v.equals(mReset)) {
mListener.onAuthenticationResetClicked(mUsername.getText().toString());
}
}
}
authentication_dialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/username_field"
android:inputType="textEmailAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp"
android:hint="@string/username"
/>
<EditText
android:id="@+id/password_field"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="12dp"
android:fontFamily="sans-serif"
android:hint="@string/password"
/>
<View
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="?android:attr/dividerVertical"
/>
<LinearLayout
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="0dp"
android:measureWithLargestChild="true" >
<Button
android:id="@+id/reset_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1.0"
android:text="@string/reset"
/>
<Button
android:id="@+id/login_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1.0"
android:text="@string/login"
/>
</LinearLayout>
</LinearLayout>