Содержимое адаптера изменилось, но ListView не получил уведомление. android проблема - PullRequest
1 голос
/ 16 марта 2020

моя проблема, когда данные поступают в ArrayAdapter, просмотр списка не обновляется до последних данных, которые я должен go на другую страницу и go назад, чтобы обновить просмотр списка, проблема просмотра списка не обновляется automati c

Мое действие в этом коде заключается в том, что когда данные обновляются в базе данных Firebase, я вставляю эти данные в arraylist и помещаю arraylist в arrayAdapter, и я запускаю приложение, и если я добавляю другие данные в свою базу данных и go на другую страницу и go Возвращаясь к моему списку в моем приложении, он без проблем показывает последние данные, но когда я остаюсь в списке, когда приходят новые данные, и присоединяюсь к списку, который приложение go отправляет на sh и IllegalStateException приходят, пожалуйста, к любой помощи. за мою проблему и извините за это engli sh это не очень хорошо, я надеюсь, что вы понимаете проблему, и я использую шаблон проектирования mvvm мой код

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   groupfragmentview = inflater.inflate(R.layout.fragment_group, container, false);
    list_View = (ListView) groupfragmentview.findViewById(R.id.list_view);
    //
    myview = ViewModelProvider.AndroidViewModelFactory.getInstance(getActivity().getApplication()).create(group_frg_view.class);
    myview.init();
    myview.getgroup().observe(this.getActivity(), new Observer<group_frg_model>() {
        @Override
        public void onChanged(final group_frg_model group_frg_model) {

            updateUI(group_frg_model);


            list_View.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String groupname = parent.getItemAtPosition(position).toString();
                    String groupid= group_frg_model.getGroupid().get(position);
                    String TAG=null;
                    Log.d(TAG,"name " + groupid);
                    Intent groupintent = new Intent(getContext(),GroupChatActivity.class);
                    groupintent.putExtra("groupname",groupname);
                    groupintent.putExtra("groupid",groupid);
                    startActivity(groupintent);


                }
            });






        }
    });


    return groupfragmentview;
}

private void updateUI(group_frg_model group_frg_model) {

    array_Adapter = new ArrayAdapter<>(getActivity(), R.layout.single_row_group_list, R.id.group_name,group_frg_model.getGroupname());
    list_View.setAdapter(array_Adapter);
    list_View.requestLayout();
    array_Adapter.notifyDataSetChanged();



}

IllegalStateException

  java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131230911, class android.widget.ListView) with Adapter(class android.widget.ArrayAdapter)]
    at android.widget.ListView.layoutChildren(ListView.java:1618)
    at android.widget.AbsListView.onTouchUp(AbsListView.java:4013)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:3806)
    at android.view.View.dispatchTouchEvent(View.java:9943)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2344)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2669)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2358)
    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:411)
    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1810)
    at android.app.Activity.dispatchTouchEvent(Activity.java:3061)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
    at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:373)
    at android.view.View.dispatchPointerEvent(View.java:10163)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4434)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4302)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3849)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3902)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3868)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3995)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3876)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4052)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3849)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3902)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3868)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3876)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3849)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6210)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6184)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6145)
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6313)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:323)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

я решаю свою проблему, спасибо всем. После поиска я обнаружил, что данные были задержаны, и просмотр списка не знает ни об одном изменении данных. Я просто редактирую модель репозитория, когда datachange и don затем сообщают списку или массиву данных о данных. изменение

0 голосов
/ 16 марта 2020

назовите это array_Adapter.notifyDataSetChanged();, где ваш список изменился так же, как вы получили ответ API

...