【问题标题】:Recyclerview adapter not working inside onResume method of fragment in ViewpagerRecyclerview 适配器在 Viewpager 中片段的 onResume 方法中不起作用
【发布时间】:2019-01-23 10:42:36
【问题描述】:

我正在尝试在片段的 onResume 方法中收听点击事件。我的 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 {

    }
}

【问题讨论】:

  • 你在哪里初始化你的适配器?
  • 在我从片段的 onCreateView 调用的方法中
  • 对不起,我刚刚检查了我已经在 onCreateView 中初始化了适配器,后来调用了我将项目添加到列表中并通知适配器更改的方法
  • 在你初始化你的适配器后,你可以调用setOnItemClickListener,不需要在回调onresume中设置监听器。目前还不太清楚您要做什么以及有什么问题

标签: android android-fragments android-viewpager fragment


【解决方案1】:

设置适配器后,将您的代码从onResume 移至onCreateView

【讨论】:

    【解决方案2】:

    这将起作用:

    @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 {
    
    }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多