【问题标题】:How do I call a child's method from the parent class?如何从父类调用孩子的方法?
【发布时间】:2017-05-05 07:34:00
【问题描述】:

假设我有一个类,ChildFragment,它继承自 ParentFragment。目的是让多个带有按钮的活动和片段通常由一个 ParentFragment 处理。

当用户按下刷新按钮时,它将调用ParentFragment 中的refresh() 函数。然而,实际下载这个文件的动作是由 ChildFragment 处理的,因为每个片段都有不同的内容。所以我希望这个 ParentFragment 在孩子身上调用一些东西,只要 refresh() 完成。

我该怎么做?或者,如果有更好的方法,它也会有所帮助。

【问题讨论】:

  • 在父级中放置一个虚拟刷新并调用它。孩子必须覆盖它。
  • 你的意思是abstract不是虚拟的:)

标签: android inheritance


【解决方案1】:

您需要覆盖子片段中的refresh 方法。

public class PFragment extends Fragment{
  protected void refresh(){
    //Common stuff here
  }
}

在子类中覆盖刷新方法

public class CFragment extends PFragment{
 public void onClick(){
  super.refresh();
 }

@Override
protected void refresh(){
 //Custom stuff here
}

}

【讨论】:

  • 但是注意父类刷新方法不会被执行,除非你在子类刷新方法中添加super.refresh()
  • 编辑了答案
【解决方案2】:
class ParentFragment() {

    protected void refresh() {
        // general code when refresh every fragment
    }
}

class ChildFragment1 extend ParentFragment {
    @Override
    public void refresh() {
         super.refresh();
         // code for refresh child fragment1
    }
}

class ChildFragment2 extend ParentFragment {
    @Override
    public void refresh(); {
         super.refresh();
         // code for refresh child fragment2
    }
}

【讨论】:

    【解决方案3】:

    如果不希望子类必须实现刷新并调用 super.refresh,请在 ParentFragment 中为 downloadFile 方法定义一个抽象方法,然后在 child(ren) 类中实现:

    class ParentFragment {
        public void refresh() {
            downloadFile();
        }
    
        protected abstract void downloadFile();
    }
    
    class ChildFragment extends ParentFragment {
        @Override
        protected void downloadFile() {
            // do the download here
        }
    }
    

    【讨论】:

      【解决方案4】:

      EventBus! - 简化组件之间的通信

      【讨论】:

        猜你喜欢
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 2012-02-22
        • 1970-01-01
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多