Каков параметр владельца в обозревателе данных в реальном времени, когда он помещен в onClickListener? - PullRequest
0 голосов
/ 27 января 2019

При нажатии кнопки я хочу сделать query для моих Room данных.У меня есть observable в моих данных, которые я положил в OnClickListener.observer отлично работает вне метода OnClickListener, но внутри него параметр владельца не соответствует.

Android Studio запрашивает android.arch.lifecycle.LifeCycleOwner, но говорит, что он получает android.view.View.OnClickListener.

showAllButton.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        //The "this" parameter is underlined red

            myViewModel.getAllDataVM().observe(    this   , new Observer<List<MyRoomEntity>>() {
                @Override
                public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
                    //myAdapter.setList( myRoomEntities );

                    Log.d("TAG", "OBSERVED");
                    if(myRoomEntities != null) {
                        for(MyRoomEntity item: myRoomEntities) {
                            Log.d("TAG ROOM ", "" + item.toString());
                        }
                    }
                }
            } );
        }
    } );//End Button

this подчеркнут красным, что является параметром owner.Я пытался использовать context, application и т. Д., Но ничего не работает.Может быть, внутри OnClickListener не может быть наблюдателя, но что мне тогда делать?

1 Ответ

0 голосов
/ 27 января 2019

Это распространенная ошибка, которую легко исправить. Ключевое слово this в настоящее время ссылается на View.OnClickListener, который является , а не одним из аргументов для .observe(). Следовательно, чтобы решить эту проблему, вам просто нужно заменить this на:

  1. getApplicationContext()
  2. MyActivity.this

Ваш код должен быть в основном без изменений:

 myViewModel.getAllDataVM().observe(getApplicationContext(), new Observer<List<MyRoomEntity>>() {
     @Override
     public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
         //.....
...