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 pada RegisterFragment

    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 mengirimkan username dan password 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 interface RegisterFragment.OnRegisterFragmentListener. Implement method dengan menekan shortcut Alt-Enter.

  • Tambahkan atribut UserViewModel pada class MainActivity

    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 ke LoginFragment.

    @Override
    public void onLoginLinkClicked() {
      Fragment loginFragment = new LoginFragment();
      changeFragment(loginFragment, false);
    }
    

results matching ""

    No results matching ""