0

我有 3 个片段,它们在主要活动中使用添加选项卡方法显示。

tablayout.addTab(one)
tablayout.addTab(two)
tablayout.addTab(three)

我有一个非活动类操作,它在被调用时传递片段的上下文。类操作将对三个片段执行操作。

Operations op = new Operations(getActivity, list, emptyList, recyclerView)

第一个参数 getActivity 是调用片段的上下文。

片段 1 有一个方法 showMessage1 片段 2 有一个方法 showMessage2 片段 3 有一个方法 showMessage3

我如何从具有这些片段之一的上下文的操作类中调用这些方法中的任何一种?

4

2 回答 2

1

这种情况下的主要问题是高耦合。如果您将逻辑分为两个类:片段和操作,片段了解操作,操作了解片段,这根本不好。让操作依赖于一个抽象。

创建一个接口并使您的每个片段都实现它。

消息显示.java

interface MessageDisplay { void showMessage(); }

片段1.java

class Fragment1 implements MessageDisplay { }

片段2.java

class Fragment2 implements MessageDisplay { }

片段3.java

class Fragment3 implements MessageDisplay { }

片段1.java

Operations op = new Operations(getActivity(), this, list, .... );

操作.java

class Operations {
    ....
    private MessageDisplay messageDisplay;
    ....
    public Operations(Activity activity, MessageDisplay messageDisplay, ...) {
        ....
        this.messageDisplay = messageDisplay;
        ....
    }

    public void methodWithYourCustomLogic(){
        ....
        messageDisplay.showMessage();
    }
}
于 2019-12-03T14:52:12.233 回答
0

您需要将上下文投射到您的 Fragment 类

例如,在您的 Operations 类中,您需要将上下文转换为 Fragment 1

当需要调用 Fragment1 的 Method 时

(context as Fragment1).showMessage1()

当需要调用 Fragment2 的 Method 时

(context as Fragment2).showMessage2()
于 2019-12-03T14:49:55.590 回答