Я создаю приложение списка дел, используя навигационный вид и фрагменты, и мне трудно понять, как создать фрагмент для каждого списка дел в базе данных. Я думаю, что это как-то связано с классом ViewModel фрагмента, но я не знаю, что туда поместить. Кроме того, я создал подменю в представлении навигации, в котором есть все списки дел, которые создал пользователь, но я не знаю, как обрабатывать события щелчка для динамических c фрагментов.
Вот класс DatabaseHelper для списка дел:
public class DatabaseHelper extends SQLiteOpenHelper {
private static String DATABASE_NAME = "ToDoList.db";
private static String TABLE_1 = "Lists";
private static String TABLE_2 = "Tasks";
//To Do List Table
private static String COL_1_TABLE_1 = "Name";
//Task Table
private static String COL_1_TABLE_2 = "Task Name";
private static String COL_2_TABLE_2 = "Notes";
private static String COL_3_TABLE_2 = "Completed";
private static String COL_4_TABLE_2 = "Due Date";
public DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("create table " + TABLE_1 +"(LIST_ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL)");
db.execSQL("PRAGMA foreign_keys=ON");
db.execSQL("create table " + TABLE_2 +"(TASK_ID INTEGER PRIMARY KEY AUTOINCREMENT, TASK_NAME TEXT NOT NULL, "+
"LIST_ID INTEGER, NOTES TEXT, COMPLETED BOOLEAN, DATA_CREATED DATE, DUE_DATE DATE, " +
"FOREIGN KEY(LIST_ID) REFERENCES LISTS(LIST_ID))");
}
public boolean insertListData(String listName)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues listValues = new ContentValues();
listValues.put(COL_1_TABLE_1,listName);
long result = db.insert(TABLE_1, null, listValues);
if (result == -1)
return false;
else
return true;
}
Вот фрагмент кода класса активности представления навигации onCreate () и onNavigationItemSelected ():
DatabaseHelper myDb;
menu = navigationView.getMenu();
submenu = menu.addSubMenu(getString(R.string.sub_menu_title));
Cursor list_result = myDb.getAllListData();
if (list_result != null)
{
while (list_result.moveToNext()) {
int count = 0;
submenu.add(count, Menu.FIRST, Menu.FIRST, list_result.getString(1)).setIcon(R.drawable.ic_to_do_list);
++count;
}
}
public boolean onNavigationItemSelected(MenuItem item){
int id = item.getItemId();
for (int i = 0; i < submenu.size(); i++)
{
if (id == submenu.getItem(i).getItemId())
{
//go to correct ListFragment
}
}
return true;
}
Вот код ListFragment:
public class ListFragment extends Fragment {
private ListViewModel mViewModel;
public static ListFragment newInstance() {
return new ListFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.list_fragment, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = ViewModelProviders.of(this).get(ListViewModel.class);
// TODO: Use the ViewModel
}
}