Membuat Save Note Fragment

  • Buatlah fragment baru yang digunakan untuk menyimpan catatan yang akan ditambahkan dan simpan pada package fragments. Gunakan menu Fragment -> Fragment (Blank).
  • Beri nama fragment dengan SaveNoteFragment, uncheck Include fragment factory methods? dan uncheck Include interface callbacks?
  • Pada layout fragment_save_note, replace dengan layout berikut.

    ```xml <?xml version="1.0" encoding="utf-8"?>

    <!--  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_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textCapWords"
        android:hint="Title" />
    </android.support.design.widget.TextInputLayout>
    
    <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_content"
        android:gravity="start"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:lines="6"
        android:hint="Note" />
    </android.support.design.widget.TextInputLayout>
    
    <android.support.v7.widget.AppCompatButton
      android:id="@+id/button_save"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="24dp"
      android:layout_marginBottom="24dp"
      android:padding="12dp"
      android:text="Save Note"/>
    
</LinearLayout>

</ScrollView>


- Pada class `SaveNoteFragment` tambahkan sebuah interface yang digunakan untuk
 berkomunikasi dengan activity. Beri nama interface
 `OnSaveNoteFragmentListener`.

  ```java
  public class SaveNoteFragment extends Fragment {

    ...
    ...
    public interface OnSaveNoteFragmentListener {
      void onSaveButtonClicked(View view, Note note, int tag);
    }
  }
  • Tambahkan atribut listener pada SaveNoteFragment dengan tipe interface OnSaveNoteFragmentListener.

    private OnSaveNoteFragmentListener listener;
    
  • Override method onAttach, register listener yang didapatkan dari activity.

    @Override
    public void onAttach(Context context) {
      super.onAttach(context);
      if (context instanceof OnSaveNoteFragmentListener) {
        listener = (OnSaveNoteFragmentListener) context;
      } else {
        throw new RuntimeException(context.toString()
          + "must implement OnNewNoteFragmentListener");
      }
    }
    
  • 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_new_note, container, false);
    final EditText titleText = view.findViewById(R.id.input_title);
    final EditText contentText = view.findViewById(R.id.input_content);
    Button saveButton = view.findViewById(R.id.button_save);
    return view;
    ...
    
  • Tambahkan event listener click pada saveButton.

    ...
    saveButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
    
      }
    });
    ...
    ...
    return view
    
  • Pada event onClick tambahkan logika untuk mengirimkan data catatan ke activity.

    ...
    if (listener != null) {
      int tag = Constant.INSERT_NOTE;
      String title = titleText.getText().toString();
      String content = contentText.getText().toString();
    
      Note newNote = new Note();
      newNote.setTitle(title);
      newNote.setContent(content);
      listener.onSaveButtonClicked(view, newNote, tag);
    }
    ...
    

Catatan: Tambahkan konstanta INSERT_NOTE dengan tipe data int pada class Constant.

  • Bukalah class MainActivity, kemudian implementasikan interface dari SaveNoteFragment.OnSaveNoteFragmentListener.

    public class MainActivity extends AppCompatActivity implements
      ...
      SaveNoteFragment.OnSaveNoteFragmentListener,
      ... {
    
    }
    
  • Generate method yang harus diimplementasikan dengan shortcut Alt-Enter.

  • Tambahkan viewmodel yang berkaitan dengan entitas Note.

    private NoteViewModel noteViewModel;
    
  • Instansiasi noteViewModel pada method onCreate

    noteViewModel = ViewModelProviders.of(this)
      .get(NoteViewModel.class);
    
  • Pada method onNotesLoad tambahkan logika untuk mengambil data semua catatan yang kemudian dikirimkan melalui adapter ke RecyclerView.

    noteViewModel.getNotes()
      .observe(this, new Observer<List<Note>>() {
        @Override
        public void onChanged(@Nullable List<Note> notes) {
          adapter.setNotes(notes);
        }
    });
    
  • Pada method onAddButtonClicked tambahkan logika untuk berpindah fragment ke SaveNoteFragment.

    Fragment fragment = new SaveNoteFragment();
    Bundle bundle = new Bundle();
    bundle.putInt(Constant.NOTE_TAG, Constant.INSERT_NOTE);
    fragment.setArguments(bundle);
    changeFragment(fragment, true);
    
  • Tambahkan logika pada method onSaveButtonClicked untuk melakukan operasi penyimpanan ke dalam database SQLite melalui viewmodel.

    noteViewModel.insert(note);
    Fragment fragment = new NoteFragment();
    changeFragment(fragment, false);
    Snackbar.make(view, "Saving note....", Snackbar.LENGTH_SHORT)
      .show();
    // return to previous fragment
    getSupportFragmentManager()
      .popBackStack();
    

results matching ""

    No results matching ""