Recyclerview适配器在Viewpager中的片段的onResume方法内部不起作用

时间:2019-01-23 10:42:37

标签: android android-fragments android-viewpager fragment

我正在尝试监听片段的onResume方法内的click事件。我的viewpager中有两个片段,如果我在两个片段中都使用onResume,则其中只有一个正在工作,而另一个则无法工作。下面是我在做什么。

片段1

public void onResume() {
    super.onResume();
    adapter.setOnItemClickListener(new catAdapterBlack.MyClickListener() {
        @Override
        public void onItemClick(String position, int pos, int posi, View v) {
         ... doing some stuff...
        }
    });


    subAdapter.setOnItemClickListener(new subcatAdapter.MyClickListener() {
        @Override
        public void onItemClick(String position, int pos, View v) {
            ... doing some stuff...
    });
}

片段2

public void onResume() {
    super.onResume();
    adapter.setOnItemClickListener(new catAdapterBlack.MyClickListener() {
        @Override
        public void onItemClick(String position, int pos, int posi, View v) {
         ... doing some stuff...
        }
    });


    subAdapter.setOnItemClickListener(new subcatAdapter.MyClickListener() {
        @Override
        public void onItemClick(String position, int pos, View v) {
            ... doing some stuff...
    });
}

我在两个片段中都使用了相同的适配器。

现在,当我在这里搜索时,我在下面找到了此解决方案,但它也无法正常工作。当我打开我的第一个片段时,应用程序崩溃,并在空对象引用上调用MyClickListener出错。到目前为止,我已经尝试了每种方法。我尝试在第一个片段中调用onresume,在第二个片段中调用以下(setUserVisibleHint)解决方案。但同样,当应用程序无法通过这种方式崩溃时,它也无法正常工作。我想在两个片段中调用Myclicklistener。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser) {
        init();
    } else {

    }
}

2 个答案:

答案 0 :(得分:0)

设置适配器后,从onResume中的onCreateView中移出代码。

答案 1 :(得分:0)

这将起作用:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
    // Here you need to check if your adapter is not null and initialize your adapters again
} else {

}
}

您需要做的只是检查适配器是否不为空,您可能需要再次初始化适配器。