Android-приложение Tab Переключение Crash - PullRequest
0 голосов
/ 12 мая 2018

У меня сейчас ошибка в приложении.У меня есть просмотрщик, который загружает сообщения из базы данных Firebase и отображает их.Когда я переключаю фрагменты и действия, я не получаю никаких ошибок.Когда я нажимаю кнопку «Домой» или кнопку «Вкладки» на моем телефоне, а затем снова нажимаю на свое приложение, происходит сбой с сообщением об ошибке

java.lang.IndexOutOfBoundsException: обнаружено несоответствие.Недопустимый адаптер держателя вида..... 0,0-1080,1497 # 7f0900c2 приложение: id / postList}, адаптер: com.sender.hp.sender.DashboardFragment$2@efd661, макет: android.support.v7.widget.LinearLayoutManager@9760586,context: com.sender.hp.sender.MainActivity@720f0fa

Всякий раз, когда я нажимаю кнопку «Назад» на моем телефоне, и мое приложение закрывается, Если я перехожу на вкладки и нажимаю на свое приложение, оноработает отлично.У меня нет слушателя onBackPressed.Вот мой код,

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<postsGetInfo, postsGetInfoViewHolder>(postsGetInfo.class, R.layout.posts_layout,postsGetInfoViewHolder.class,postRef) {
                @Override
                protected void populateViewHolder(final postsGetInfoViewHolder viewHolder, postsGetInfo model, int position) {
                    TextView txtUpvote = (TextView) viewHolder.myView.findViewById(R.id.txtUpvoteCount);
                    final String postKey = getRef(position).getKey();
                    viewHolder.setUsername(model.getUsername());
                    viewHolder.setTime(model.getTime());
                    viewHolder.setDate(model.getDate());
                    viewHolder.setDescription(model.getDescription());
                    viewHolder.setProfileImage(model.getProfileimage());
                    viewHolder.setImage(model.getImage());
                    viewHolder.setDisplayvotes(model.getDisplayvotes());
                    viewHolder.myView.findViewById(R.id.imgDownvote).setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                           UpdateTheDisplayVotes(postKey);
                           ++getDownvotes;
                           --getDisplayVotes;
                           String txtDisplayVotes = Integer.toString(getDisplayVotes);
                           postRef.child(postKey).child("downvotes").setValue(getDownvotes);
                           postRef.child(postKey).child("displayvotes").setValue(txtDisplayVotes);
                        }
                    });
                    viewHolder.myView.findViewById(R.id.imgUpvote).setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            UpdateTheDisplayVotes(postKey);
                            ++getUpvotes;
                            ++getDisplayVotes;
                            String txtDisplayVotes = Integer.toString(getDisplayVotes);
                            postRef.child(postKey).child("upvotes").setValue(getUpvotes);
                            postRef.child(postKey).child("displayvotes").setValue(txtDisplayVotes);
                        }
                    });

                    viewHolder.myView.findViewById(R.id.imgPost).setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Intent editIntent = new Intent((getActivity()),postEdit.class);
                            editIntent.putExtra("PostKey",postKey);
                            startActivity(editIntent);                                      
                        }
                    });
                }
            };
        postList.setAdapter(firebaseRecyclerAdapter);
        }

private void UpdateTheDisplayVotes(final String key) {
    VoteListener = postRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                if (dataSnapshot.hasChild("displayvotes")){
                displayvotes = dataSnapshot.child(key).child("displayvotes").getValue().toString();
                    getDisplayVotes = Integer.parseInt(displayvotes);
                }
                if (dataSnapshot.hasChild("upvotes")){
                upvotes = dataSnapshot.child(key).child("upvotes").getValue().toString();
                    getUpvotes = Integer.parseInt(upvotes);
                }
                if (dataSnapshot.hasChild("downvotes")){
                    downvotes = dataSnapshot.child(key).child("downvotes").getValue().toString();
                    getDownvotes = Integer.parseInt(downvotes);
                }
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

@Override
public void onStart() {
    super.onStart();
    firebaseRecyclerAdapter.startListening();

}
@Override
public void onStop() {
    super.onStop();
    if (firebaseRecyclerAdapter != null){
        firebaseRecyclerAdapter.cleanup();
    }
}

Кто-нибудь знает, как исправить?Спасибо за любые ответы!

1 Ответ

0 голосов
/ 12 мая 2018

Эта ошибка возникает при очистке адаптера или списка в адаптере.

Вызовите notifyDataSetChanged(), когда адаптер очищен.

@Override 
public void onStop() { 
    super.onStop(); 
    if (firebaseRecyclerAdapter != null){ 
        firebaseRecyclerAdapter.cleanup(); 
        firebaseRecyclerAdapter.notifyDataSetChanged();
    } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...