Membuat Register Fragment
Sebagai langkah selanjutnya, buatlah sebuah fragment untuk menangani proses registrasi user. Ikuti langkah-langkah berikut:
- Buatlah fragment pada package
fragments, Fragment -> Fragment (Blank). - Beri nama fragment dengan
RegisterFragment, uncheck Include fragment factory methods? dan uncheck Include interface callbacks? Pada layout
fragment_register.xml, replace dengan layout berikut.<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="56dp" android:paddingLeft="24dp" android:paddingRight="24dp"> <!-- Name Label --> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginBottom="8dp"> <EditText android:id="@+id/input_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textCapWords" android:hint="Name" /> </android.support.design.widget.TextInputLayout> <!-- Password Label --> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginBottom="8dp"> <EditText android:id="@+id/input_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:hint="Password"/> </android.support.design.widget.TextInputLayout> <!-- Register Button --> <android.support.v7.widget.AppCompatButton android:id="@+id/button_register" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_marginBottom="24dp" android:padding="12dp" android:text="Create Account"/> <TextView android:id="@+id/link_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="24dp" android:text="Already a member? Login" android:gravity="center" android:textSize="16dip"/> </LinearLayout> </FrameLayout>Buatlah sebuah interface yang nanti digunakan untuk berkomunikasi dengan activity. Interface ini untuk menangani proses pada saat tombol register ditekan serta label login ditekan.
public interface OnRegisterFragmentListener { void onRegisterButtonClicked(View view, String username, String password); void onLoginLinkClicked(); }Tambahkan atribut listener
OnRegisterFragmentListenerpadaRegisterFragmentprivate OnRegisterFragmentListener listener;Override method
onAttach, register listener yang didapatkan dari activity.@Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnRegisterFragmentListener) { listener = (OnRegisterFragmentListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnRegisterFragmentListener"); } }Override method
onDetach, unregister listener dari activity.@Override public void onDetach() { super.onDetach(); listener = null; }Modifikasi method
onCreateView, tambahkan logika untuk menghubungkan view dengan fragment.... ... View view = inflater.inflate(R.layout.fragment_register, container, false); final EditText usernameText = view.findViewById(R.id.input_username); final EditText passwordText = view.findViewById(R.id.input_password); Button registerButton = view.findViewById(R.id.button_register); return view; ...Tambahkan event listener click pada
registerButton.... registerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); ... ... return viewPada event
onClicktambahkan logika untuk mengirimkanusernamedanpasswordke activity.... ... if (listener != null) { String username = usernameText.getText().toString(); String password = passwordText.getText().toString(); listener.onRegisterButtonClicked(view, username, password); } ...Tambahkan event listener click pada
loginLink.loginLink.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } });Pada event
onClicktambahkan pemanggilan listener ketika login ditekan.if (listener != null) { listener.onLoginLinkClicked(); }Buka class
MainActivity, kemudian implementasikan interfaceRegisterFragment.OnRegisterFragmentListener. Implement method dengan menekan shortcutAlt-Enter.Tambahkan atribut
UserViewModelpada classMainActivityprivate UserViewModel userViewModel;Pada method
onRegisterButtonClicked, implementasikan logic untuk melakukan registrasi.@Override public void onRegisterButtonClicked(View view, String username, String password) { User user = new User(username, password); userViewModel.insert(user); Snackbar.make(view, "Registration has been successfull", Snackbar.LENGTH_SHORT) .show(); LoginFragment fragment = new LoginFragment(); changeFragment(fragment, false); }Pada method
onLoginLinkClicked, implementasikan logic untuk memindah fragment keLoginFragment.@Override public void onLoginLinkClicked() { Fragment loginFragment = new LoginFragment(); changeFragment(loginFragment, false); }