2017-05-05 72 views
3

比方说,我有一个类,ChildFragmentParentFragment继承。目的是通过一个ParentFragment来处理多个带有按钮的活动和片段。如何从父类调用孩子的方法?

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

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

+0

将虚拟刷新放入父级并调用它。孩子必须覆盖它。 –

+1

你的意思是'抽象'不是虚拟:) –

回答

5

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

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

在子类中ovveride的刷新方法

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

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

} 
+0

但是请注意,除非你添加super.refresh()到子类的刷新方法,否则父刷新方法将不会被执行 –

+0

编辑答案 –

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

如果你不想让孩子类必须实现刷新,并呼吁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 
    } 
} 
1

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