放入onClickListener时,实时数据观察器中的owner参数是什么?

时间:2019-01-27 13:11:34

标签: java android android-studio onclicklistener android-livedata

单击按钮时,我想为我的query数据创建一个Room。我在observable中输入的数据上有一个OnClickListenerobserverOnClickListener方法之外工作正常,但是在其中,owner参数不匹配。

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参数。我尝试使用contextapplication等,但没有任何效果。也许不可能在OnClickListener中有观察者,但是我该怎么办?

1 个答案:

答案 0 :(得分:1)

这是一个易于修复的常见错误。 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) {
         //.....