ValueEventListener не работает должным образом

1

Я пытаюсь отобразить данные, хранящиеся в Firebase, в раскрывающемся списке AutoCompleteTextView. Для этой цели я использую ValueEventListener. Согласно документации ValueEventListener,

Вы можете использовать метод onDataChange() для чтения статического моментального снимка содержимого по заданному пути, поскольку они существовали во время события. Этот метод запускается один раз, когда слушатель присоединяется и снова каждый раз, когда данные, включая детей, изменяются.

К сожалению, в моем случае onDataChange() запускается только при изменении данных (то есть при добавлении новых данных). Это означает, что AutoCompleteTextView не отображает выпадающее меню без каких-либо изменений в данных в Firebase. Я хочу, чтобы onDataChange() запускался в первый раз, когда вызывается Listener, и каждый раз, когда данные изменяются. Я хотел бы знать, где я ошибаюсь. Следующий код появляется внутри onCreateView фрагмента

daTags.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //Basically, this says "For each DataSnapshot *Data* in dataSnapshot, do what inside the method.
            for (DataSnapshot tagNameSnapshot : dataSnapshot.getChildren()) {
                //Get the suggestion by childing the key of the string you want to get.
                String ValueTagName = tagNameSnapshot.child(getResources().getString(R.string.Child_AppData_Tags_TagName)).getValue(String.class);
                //Add ValueTagName (Value pulled from Firebase for the above Key) to TagList
                //Is better to use a List, because you don't know the size of the iterator returned by dataSnapshot.getChildren() to initialize the array
                tagList.add(ValueTagName);

                //Initialize AutoCompleteTextView and define Adapter
                ArrayAdapter<String> adapterAutoComplete = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, tagList);
                actv_tagName.setAdapter(adapterAutoComplete);

                //Get TagsCount using dataSnapshot and display TagsCount in TextView
                TagsCount = dataSnapshot.getChildrenCount() + "";
                tv_tagsCount.setText(TagsCount);
            }
        });

Спасибо

  • 0
    Метод onDataChange() действительно запускается один раз для исходных данных, а затем снова с любыми изменениями, как описано. Я предполагаю, что проблема заключается в AutoCompleteTextView и адаптере, хотя у меня нет времени, чтобы проверить это. Попробуйте поместить сообщение журнала или что-то в onDataChange, чтобы подтвердить, запущен онDataChange или нет.
  • 0
    onDataChange(){} не предоставляет исходные данные. Однако после изменения существующих данных (добавления новых данных) в удаленную базу данных onDataChange(){} работает как положено (как упоминалось в вопросе выше). Я хотел бы знать, что заставляет onDataChange(){} не возвращать исходные данные.
Показать ещё 2 комментария
Теги:
firebase
firebase-database

1 ответ

0

Думаю, я понял проблему. Чтобы заставить его работать, мне придется переместить следующие строки кода вне цикла For

ArrayAdapter<String> adapterAutoComplete = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, tagList);
actv_tagName.setAdapter(adapterAutoComplete);

Внутри цикла For адаптер обновляется для каждого цикла. Размещение вышеописанного кода за пределами цикла, устраняет проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню