notifyDataSetChanged () не работает для FirebaseRecyclerAdapter - PullRequest
0 голосов
/ 02 июля 2018

Удаление элементов из FirebaseRecyclerAdapter работало нормально, пока я не переключился на шаблон MVP. прямо сейчас адаптер не уведомляет об изменении и выдает ошибку. Как я могу решить эту проблему.

Вот мой FirebaseRecyclerAdapter,

@Override
    public FirebaseRecyclerAdapter onEntryListChanged(Query query, FirebaseRecyclerOptions<EntryModel> options) {

        adapter = new FirebaseRecyclerAdapter<EntryModel, EntryHolder>(options) {
            @NonNull
            @Override
            public EntryHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.entry_item_view,parent,false);


                return new EntryHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull final EntryHolder holder, final int position, @NonNull EntryModel model) {
                entryView.attachView(model.getTitle(),model.getContent(),model.getDate(),holder);

                holder.entryUpdate.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        updateFragment(adapter.getRef(position).getKey());
                    }
                });

                holder.entryDelete.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("Entry").child(FirebaseAuth.getInstance().getUid());
                        mDatabase.child(adapter.getRef(position).getKey()).removeValue();
                        notifyDataSetChanged();

                    }
                });
                holder.expandArrow.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        boolean shouldExpand = holder.expandContent.getVisibility() == View.GONE;
                        ChangeBounds transition = new ChangeBounds();
                        transition.setDuration(200);

                        if(shouldExpand){
                            entryView.expandArror(holder);
                        }
                        else {
                            entryView.collapsArrow(holder);
                        }
                        entryView.startTransition(holder,transition,shouldExpand);



                    }
                });
            }
        };
        return adapter;

проблема с удалением.

файл журнала,

07-02 00:38:47.678 29773-29773/com.example.nejat.journalapptrail1 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.nejat.journalapptrail1, PID: 29773
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:411)
        at com.firebase.ui.common.BaseObservableSnapshotArray.getSnapshot(BaseObservableSnapshotArray.java:70)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.getRef(FirebaseRecyclerAdapter.java:112)
        at com.example.nejat.journalapptrail1.EntryList.EntryListPresenter$1$2.onClick(EntryListPresenter.java:72)
        at android.view.View.performClick(View.java:6261)
        at android.view.View$PerformClick.run(View.java:23752)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6776)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Исправлено несколько простых ошибок:

  • Везде, где вы используете position, измените его на holder.getAdapterPosition(). (Чтобы упростить отлов этих ошибок, удалите модификатор final из параметра position.)
  • Удалить notifyDataSetChanged() звонки, это сделано для вас.
0 голосов
/ 02 июля 2018

Кажется, вы делаете ошибку при получении значений от дочерних узлов.

Мне понравился пример реализации FirebaseRecyclerAdapter.

https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerAdapter.java

Я тоже попробовал это, и у меня это сработало.

0 голосов
/ 02 июля 2018

вы получаете

 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

вы пытаетесь получить доступ к индексу 1, но размер массива равен 1, вам нужен доступ к индексу 0.

попытайтесь уменьшить на 1 значение вашей позиции для доступа к правильному полю в массиве.

mDatabase.child(adapter.getRef(position-1).getKey()).removeValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...