【问题标题】:populate navigation menu from sqlite database- android从 sqlite 数据库填充导航菜单 - android
【发布时间】:2016-10-25 04:46:25
【问题描述】:

在我的 sqlite 数据库中,我有一个表

名称:类别

列名:项目(只有一列) items 列中的行: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 来获取该数组列表并将其放入导航菜单中

请帮忙...

【问题讨论】:

  • 考虑 DatabaseHandler 扩展 Sqliteopenhelper 类。因此,您可以在活动类中创建 DatabaseHandler 对象并调用 getAllMenu() 方法,返回的列表可以设置为 navigationView。
  • 表示 items=db.getAllMenu();。对吗?
  • 但我怎样才能将项目数组列表添加到导航菜单?
  • 没错……
  • 我正在将所有数据从 db 获取到 arraylist,但我不知道如何将该数组列表添加到导航菜单...以便它可以在导航抽屉菜单中可见

标签: java android sqlite


【解决方案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));  

完成!!! :D

【讨论】:

  • 顺便说一句,如果你在数据库查找之前声明了适配器,你可以直接add到适配器变量
  • 另外,String[] 完全没有必要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多