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 interfaceOnSaveNoteFragmentListener
.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 dataint
pada classConstant
.
Bukalah class
MainActivity
, kemudian implementasikan interface dariSaveNoteFragment.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 methodonCreate
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 keSaveNoteFragment
.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();