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
OnRegisterFragmentListener
padaRegisterFragment
private 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 view
Pada event
onClick
tambahkan logika untuk mengirimkanusername
danpassword
ke 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
onClick
tambahkan 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
UserViewModel
pada classMainActivity
private 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); }