Как исправить призрачные записи в списке Android? - PullRequest
0 голосов
/ 01 февраля 2019

Я получаю свои данные из firebase, и все работает нормально, но в представлении списка я получаю призрачные записи (элементы), как показано ниже.

https://i.imgur.com/9sVk20x.jpg "это скриншот сdevice "

- вот мой код, из которого я получаю и отображаю элементы списка

    public void displayNearTopics(GeoQuery locGeoQuery) {

    //Log.d(TAG, "SharedPref, new topics: "+prefs.getInt(NO_NEW_TOPICS,0));

    locTopics.clear();
    loctopicId.clear();
    locTopicsListAdapter = new TopicsListAdapter(getActivity(), locTopics, loctopicId);
    mTopicsRecyclerView.setAdapter(locTopicsListAdapter);
    //mTopicsRecyclerView.setHasFixedSize(true);
    mTopicsRecyclerView.showShimmerAdapter();
    mTopicsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    locGeoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(final String key, GeoLocation location) {
            //key is the topic key
            //Toast.makeText(getActivity(), "The retrieved keys are:" + key, Toast.LENGTH_SHORT).show();
            mTopicsRecyclerView.hideShimmerAdapter();
            Log.d(TAG, "Key entered:"+ key);
            if(bottomNavigation.getCurrentItem()!=2){
                int currentCount = prefs.getInt(NO_NEW_TOPICS, 0)+1;

                Log.d(TAG, "ONKEYENTERED, SharedPref, new topics, current count: "+currentCount);

                SharedPreferences.Editor editor = prefs.edit();
                editor.putInt(NO_NEW_TOPICS, currentCount);
                editor.apply();
                Log.d(TAG, "ONKEYENTERED, SharedPref, new topics, shared ref: "+prefs.getInt(NO_NEW_TOPICS, 0));
                //bottomNavigation.setNotification(String.valueOf(currentCount),2);
                //bottomNavigation.refresh();

            }
            else{
                SharedPreferences.Editor editor = prefs.edit();
                editor.putInt(NO_NEW_TOPICS, 0);
                editor.apply();
            }
            DatabaseReference topicRef = FirebaseDatabase.getInstance().getReference()
                    .child(FirebaseValues.TOPICS_TABLE).child(key);
            topicRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Topics tempTopic;
                    tempTopic = dataSnapshot.getValue(Topics.class);


                    locTopics.add(0, tempTopic);
                    loctopicId.add(0, key);
                    locTopicsListAdapter.notifyItemInserted(locTopics.size() - 1);
                    swipeRefTopic.setRefreshing(false);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });


        }

        @Override
        public void onKeyExited(String key) {

        }

        @Override
        public void onKeyMoved(String key, GeoLocation location) {

        }

        @Override
        public void onGeoQueryReady() {

        }

        @Override
        public void onGeoQueryError(DatabaseError error) {

        }
    });


}

Я использую FireFase Geofire для получения ключей, которые имеют заданный радиус.Все работает отлично, за исключением того, что я получаю некоторые неизвестные элементы в моем списке просмотра.Кроме того, они исчезают, как только я прокручиваю достаточно вниз, а затем возвращаюсь назад.

1 Ответ

0 голосов
/ 01 февраля 2019

Похоже, вы уведомляете о неправильной позиции.

// Inserting item at index 0.
locTopics.add(0, tempTopic);
// Updating position at the end of the list.
locTopicsListAdapter.notifyItemInserted(locTopics.size() - 1);

Вы должны изменить notifyItemInserted на пропуск 0.

locTopicsListAdapter.notifyItemInserted(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...