【问题标题】:How to access a method from fragment class to adapter class如何访问从片段类到适配器类的方法
【发布时间】:2018-07-26 12:06:22
【问题描述】:

我想在适配器类的 onClick 函数中使用reloadTransList() 方法。这是片段类中的方法。

translistTab.java

public void reloadTransList() {
    productTransList.clear();
    transRecyclerView.getAdapter().notifyDataSetChanged();
    loadTransList();
}

这就是我在适配器类中的调用方式。

prodAdapter.java

translistTab translistTab = new translistTab();
translistTab.reloadTransList();

编辑:

现在正在调用该方法。但是loadproducts(); 无法正常工作。 loadproducts() 方法是在recyclerview 中加载产品。该方法正在运行,但回收器视图未重新加载。

【问题讨论】:

  • 您可以将片段的链接作为初始化的一部分传递给您的适配器类,例如 adapter = new Adapter(Fragment.this, xx)
  • 这个适配器用于另一个片段。不是这个片段

标签: java android fragment adapter


【解决方案1】:

也许您忘记在适配器的 ViewHolder 内部类中添加 setOnCLickListner(this)。如果你添加这个,你将能够从 onClick() 方法调用 reloadTransList()。

【讨论】:

  • 我已经添加了这个先生。我也有一个 nullpointerexeption
【解决方案2】:

一个简短的答案是通过构造函数或设置器将片段传递到您的适配器。

一个更长、更好的答案是定义一个自定义接口,该接口由您的片段实现并传递到您的适配器。实现的接口将包含您的reloadTransList() 方法

编辑

我不确切知道您的课程是如何设置的,但较长的解决方案如下所示。

首先,定义一个接口。

public interface MyCustomInterface {
    void onCustomAction();
}

具体的实现可能会因您的需要而异。

接下来,在您的片段类中,实现接口。将reloadTransList() 方法放在里面。

public class MyFragment extends Fragment implements MyCustomInterface {
    // All your other, unrelated Fragment code

    @Override
    public void onCustomAction() {
        reloadTransList();
    }
}

现在,在您的适配器类中。将接口(不是片段)传递给适配器并将其分配给实例变量。我个人更喜欢通过构造函数来做到这一点:

public class prodAdapter extends Adapter { // I'm only assuming the adapter you are using. It has no relevance to this

    private MyCustomInterface customInterface;

    public prodAdapter(MyCustomInterface customInterface) {
        this.customInterface = customInterface;
    }
}

从那里,只需在需要触发reloadTransList() 方法的地方调用customInterface.onCustomAction()

简短的解决方案就像上面的代码一样,只是只有片段,没有接口。强烈建议你走很长的路。尤其是用于测试目的。

编辑#2

长解决方案的另一个优点是您可以在另一个类中重复使用适配器而无需更改它。对于使用适配器的其他片段,请实现 MyCustomInterface

public class AnotherFragment extends Fragment implements MyCustomInterface {
    @Override
    public void onCustomAction() {
        // Put whatever you need here. Or nothing.
    }
}

这允许适配器在多个片段中重复使用。

【讨论】:

  • 您能详细说明什么是自定义界面吗?我是安卓开发新手
  • 我在这里的其他问题中寻找过这个。但我真的不明白
  • 我将在哪里定义接口?
  • @MikaelFaire 无处不在。它是公开的。
  • 请问如果我这样做,recyclerview会重新加载吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2022-12-17
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多