заполнить меню навигации из базы данных sqlite- Android

#java #android #sqlite

#java #Android #sqlite

Вопрос:

в моей базе данных sqlite у меня есть одна таблица

Название: категория

имя столбца: элементы (только один столбец) строки в столбце элементы: abc, xyz и т.д…

но я не хочу создавать пользовательский навигационный ящик. итак, я добавил действие навигационного ящика по умолчанию.

в моем DatabaseHandler.java существует код для извлечения всех элементов в arraylist следующим образом:

 public ArrayList<menu> getAllMenu() {
        ArrayList<menu> catList = new ArrayList<menu>();
        // Select All Query
        String selectQuery = "SELECT * FROM "   CATEGOTY_TABLE_NAME;
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                menu menu = new menu();

                menu.setItem(cursor.getString(0));

        // Adding category to list
                catList.add(menu);
            } while (cursor.moveToNext());
        }
        // return category list
        return catList;
    }
  

MainActivity.java содержит:

 DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
  

я удалил все пункты меню по умолчанию, потому что я не хочу помещать их в XML-файл. я хочу заполнить их из базы данных.

но вопрос в том, как я могу вызвать databasehandler.java чтобы получить этот список массивов и поместить его в navigationmenu

пожалуйста, помогите…

Комментарии:

1. Рассмотрение DatabaseHandler расширяет класс Sqliteopenhelper. Итак, вы можете создать объект DatabaseHandler в классе activity и вызвать метод getAllMenu(), возвращаемый список которого можно установить в NavigationView.

2. означает items=db.getAllMenu();. правильно?

3. но как я могу добавить эти элементы arraylist в меню навигации?

4. Да, точно….

5. я получаю все данные из базы данных в arraylist, но я не знаю, как добавить этот список массивов в навигацию menu…so что это может быть видно в меню навигационного ящика

Ответ №1:

Добавление следующего кода после инициализации меню навигации дало мне желаемый результат:

     NavigationView navigationView = (NavigationView)findViewById(R.id.nav_view);// initialization of navigation menu
    navigationView.setNavigationItemSelectedListener(this);//adding listener to navigation menu

    List<String> item = db.getAllMenu();//getting data from database

    ListView lv=(ListView)findViewById(R.id.list_view_inside_nav);//initialization of listview

    String[] lv_arr = new String[item.size()];//creating a String[] just as the size of the data retrieved from database

    //adding all data from item list to lv_arr[]
    for(int i=0;i<item.size();i  ){
        lv_arr[i]= String.valueOf(item.get(i));
    }

    //setting adapter to listview
    lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,
           android.R.layout.simple_list_item_1, lv_arr));  
  

Готово!!! 😀

Комментарии:

1. Кстати, если вы объявили адаптер перед поиском в базе данных, вы могли add напрямую обращаться к переменной adapter

2. В качестве альтернативы, String[] совершенно не нужно