【问题标题】:How to access a fragment method from a class which is passed to it as a context如何从作为上下文传递给它的类中访问片段方法
【发布时间】:2019-12-03 23:23:45
【问题描述】:

我有 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

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

【问题讨论】:

    标签: android android-fragments android-context page-fragments


    【解决方案1】:

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

    创建一个接口并让你的每个片段实现它。

    MessageDisplay.java

    interface MessageDisplay { void showMessage(); }
    

    Fragment1.java

    class Fragment1 implements MessageDisplay { }
    

    Fragment2.java

    class Fragment2 implements MessageDisplay { }
    

    Fragment3.java

    class Fragment3 implements MessageDisplay { }
    

    Fragment1.java

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

    Operations.java

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

    【讨论】:

      【解决方案2】:

      您需要将上下文转换为 Fragment 类

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

      当需要调用Fragment1的方法时

      (context as Fragment1).showMessage1()
      

      当需要调用Fragment2的方法时

      (context as Fragment2).showMessage2()
      

      【讨论】:

      • 您能否更具体地说明我如何做到这一点。假设如果 Fragment1 类是 frag_operation 那么我该如何转换它呢?需要代码声明
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2014-01-21
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多