Как добавить события кликов для динамических c фрагментов в навигационном представлении в Android? - PullRequest
0 голосов
/ 27 февраля 2020

Я создаю приложение списка дел, используя навигационный вид и фрагменты, и мне трудно понять, как создать фрагмент для каждого списка дел в базе данных. Я думаю, что это как-то связано с классом 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
    }

}
...