从片段恢复活动

时间:2016-07-28 03:14:31

标签: android

我多次尝试从Fragment中调用MainActivity的Resume方法, 在结果中只调用onResume();。 恢复方法的代码

   protected void onResume() {   
        all.clear();
        outgoing.clear();
        incoming.clear();
        getFromSdcard();
        super.onResume();
    }

我想从片段中调用此方法。

3 个答案:

答案 0 :(得分:1)

增强@ cricket_007回复:

您可以从父Activity调用 onResume ,但就像您所见, onResume具有受保护的访问阻止您调用它。
有一个小的可见性解决方法,允许您这样做。

1 - 在您的活动上实施此方法

public void myOnResume(){
    this.onResume();
}

2 - 然后在您的片段上,您可以调用

public void myFragmentMethod(){
    // make sure to double check casts (to YourActivity) like these before invoking
    ((YourActivity) getActivity()).myOnResume();
}

结论和建议:即使不建议您这样实现,也可以像我说的那样完成。

在我看来,你应该做的是:

1 - 将 onResume()方法的所有功能都放在正确的方法中(您的名字!),如:

 public void clearData() {   
        all.clear();
        outgoing.clear();
        incoming.clear();
        getFromSdcard();
    }

2 - 然后你可以将所有这些功能与onResume()分开,并且仍然可以像

那样调用它们
protected void onResume() {   
    super.onResume();
    clearData();
}

3 - 在您的片段上调用它(如前所示)

public void myFragmentMethod(){
        // make sure to double check casts (to YourActivity) like these before invoking
        ((YourActivity) getActivity()).clearData();
    }

让我知道它是怎么回事。 的问候,

答案 1 :(得分:0)

您正在调用碎片onResume()

你可以尝试getActivity().onResume(),但是你真的应该创建一个方法来做你需要的代码而不是显式调用生命周期方法。

答案 2 :(得分:0)

创建界面

interface OnParentActivityResumed {
    fun onActivityResumed()
}

在片段中实现接口

class MyFragment: Fragment(), OnParentActivityResumed{
    override fun onActivityResumed() {
        //[YOUR CODE WHEN PARENT ACTIVITY RESUMED]
    }
}

关于父活动onResume add

  override fun onResume() {
        super.onResume()
        myFragment.onActivityResumed()
    }