Добавить элементы в listview из БД

244
23 августа 2017, 16:30

В actionBar находится кнопка "Добавить", при нажатии на которую должен отображаться фрагмент с ListView, в котором содержится список данных, взятых из БД.

Обработчик нажатия в MainActivity:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        fragmentTransaction = getFragmentManager().beginTransaction();
        switch (id) {
            case R.id.action_add:
                fragmentTransaction.replace(R.id.content_frame, fragmentAllIngredients);
                break;
            case R.id.action_search:
                break;
            default:
                break;
        }
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
        return super.onOptionsItemSelected(item);
    }

Метод onStart в самом фрагменте:

@Override
public void onStart() {
    super.onStart();
    context = getActivity().getApplicationContext();
    DBAssetHelper dbSetup = new DBAssetHelper(context);
    dbSetup.getWritableDatabase();
    try {
        SQLiteOpenHelper databaseHelper = new DBOpenHelper(context);
        SQLiteDatabase db = databaseHelper.getReadableDatabase();
        String[] columns = {DBOpenHelper.TableAllIngredientsColumnName};
        Cursor cursor = db.query(DBOpenHelper.TableAllIngredients, columns, null, null, null, null, DBOpenHelper.TableAllIngredientsColumnName);
        if (cursor.moveToFirst()) {
            String[] ingredients = new String[cursor.getCount()];
            int i = 0;
            do {
                ingredients[i] = cursor.getString(0);
                i++;
            }
            while (cursor.moveToNext());
            ListView lviAllIngredients = view.findViewById(R.id.lvi_allIngredients);
            ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, ingredients);
            lviAllIngredients.setAdapter(adapter);
        }
        cursor.close();
        db.close();
    } catch (SQLiteException e) {
        Toast.makeText(context, "База данных недоступна" + '\n' + e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

Пройдясь по отладке, видно, что БД считывается корректно и данные заносятся в массив ingredients. Однако, на экране отображается пустой ListView. В чем может быть причина?

UPD: попробовал изменить текст в TextView, но текст не поменялся. Видимо, дело в неправильном взаимодействиями с элементами экрана из фрагмента

Answer 1

Посадите код заполнения списка в Fragment.onCreateView()

READ ALSO
StringUtil cannot be resolved

StringUtil cannot be resolved

Ругается на строки resultappend(StringUtil

337
работа с json файлами [требует правки]

работа с json файлами [требует правки]

У меня есть пакет provider/lang, в нем два языковых файлаОдин из них дефолт, на случай если язык не найден

231
как упаковать и распаковать ARJ архивы в JAVA

как упаковать и распаковать ARJ архивы в JAVA

Как упаковать и распаковать несколько текстовых файлов в ARJ архив и наоборот на JAVAВ проекте не рекомендуется использование ARJ архиваторов

251
Перехват события развертывания узла JTree Swing

Перехват события развертывания узла JTree Swing

Как перехватить событие развертывания узла?

335