如何从片段类到适配器类访问方法

时间:2018-07-26 12:06:23

标签: java android fragment adapter

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

translistTab.java

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

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

prodAdapter.java

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

编辑:

现在正在调用该方法。但是loadproducts();不能正常工作。 loadproducts()方法是在recyclerview中加载产品。该方法正在运行,但是recyclerview没有重新加载。

2 个答案:

答案 0 :(得分:1)

也许您忘记在适配器的ViewHolder内部类中添加setOnCLickListner(this)。如果添加此选项,则可以从onClick()方法调用reloadTransList()。

答案 1 :(得分:0)

一个简单的答案是通过构造函数或setter将片段传递到适配器中。

更好的答案是定义一个自定义接口,该接口将由您的片段实现并传递到适配器中。已实现的接口将包含您的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();
    }
}

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

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;
    }
}

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

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

编辑#2

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

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

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