#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
напрямую обращаться к переменной adapter2. В качестве альтернативы,
String[]
совершенно не нужно