使用Interface从Activity转换为Fragment

Swa*_*nil 2 java android android-fragments android-activity

我已经搜索了SO这个问题,但是找不到能解决我问题的任何东西.我的问题是,我有一个包含FrameLayout的活动,它不断更新不同的片段.顶视图和底视图将保持相同,因此它们位于活动的布局中.

正如您所看到的,底部视图上有一个按钮,我想要在FrameLayout中出现的片段中进行更改.

在此输入图像描述

我创建了一个界面

public interface ShowFormula {

    void showFormula(boolean show);

}
Run Code Online (Sandbox Code Playgroud)

我将用于在片段中实现.现在我的MainActivity类中的主要问题我正在尝试初始化接口但不能因为我得到类转换异常

showFormula = (ShowFormula) this;//yes i know this is wrong
Run Code Online (Sandbox Code Playgroud)

我应该如何初始化它以便与片段进行通信.主要目标是在单击活动中的按钮时切换视图.

提前致谢.

Dan*_*ent 11

您不需要使用接口来从Activity调用Fragment.只需保持对当前Fragment的引用,并从Activity中调用Fragment中的公共方法.

如果你有多个Fragments并且你不想为每个片段保留一个引用,你可以创建一个Fragment基类,在基类中声明common方法,然后在所有继承的片段中实现该方法覆盖基础片段.然后,保留基本片段类型的一个引用,并始终将其设置为当前显示的片段.


Roh*_*ngh 5

活动 ---> 片段

从 Activity 到 Fragment 的通信非常简单。你真的不需要听众。

假设您在 Fragment 中有一个方法 share()

public class MyFragment extends Fragment{

   public static MyFragment getInstance()
   {
       return new MyFragment();
   }

   ........

   public void share()
   {
        // do something
   }

}
Run Code Online (Sandbox Code Playgroud)

如何share()从活动中调用方法?

获取 Fragment 的引用并调用该方法。简单的!

MyFragment myFragment = MyFragment.getInstance();
myFragment.share();
Run Code Online (Sandbox Code Playgroud)

您可以查看Fragment to Fragment Communication的完整工作代码