【问题标题】:Fragment activity communication by passing Context object to onAttach()通过将 Context 对象传递给 onAttach() 进行 Fragment 活动通信
【发布时间】:2015-10-05 13:18:36
【问题描述】:

我正在尝试实现片段到活动的通信。

通过android developer doc,其中一个Activity对象被传递给onAttach生命周期并设置Fragment-Activity通信。

documentation 要求传递 Context 对象而不是 Activity。我将生命周期方法onAttach中的所有Activity对象替换为Context对象。但它在从 Fragment 调用接口的方法时抛出 NullPointerException。

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        colourChangerInterface = (ColourChangerInterface) context;
    }
    catch (Exception exp){
        System.out.println("error!");
    }
}

任何人都可以举一个新方式的用法的小例子吗? 谢谢

编辑

找到this 链接,在该链接中对同一问题进行了详细讨论。 问题是由于 API 'onAttach()' 损坏;传递 Context 对象时根本不会调用它。

从上面的链接中找到的一个简单快捷的解决方案是将代码从 onAttach 移动到 onCreate。

【问题讨论】:

  • 您是否尝试过使用 android-studio app-wizzard 创建一个新的主/从活动?这应该包含您需要的所有东西。
  • 不,我正在扩展 AppCompatActivity。让我探索一下主/细节活动..

标签: android android-fragments android-fragmentactivity


【解决方案1】:

这里有一个小例子来描述ActivityFragment 之间的通信。假设您有一个接口ICommunication。这在下面给出:

public interface ICommunication {
    public void testMethod();
}

现在您有一个实现ICommunicationActivity 名称MainActivity,那么它必须实现testMethod() 方法。这个方法会是这样的:

@Override
    public void testMethod() {
    Toast toast = Toast.makeText(getActivity(), "It's called from Fragment", Toast.LENGTH_SHORT).show();
}

现在,假设这个 MainActivity 属于 Fragment 名称 TestFragment 。如果你想从TestFragment访问MainActivity的testMethod(),那么你可以简单地使用这种方式调用:

((ICommunication)getActivity()).testMethod();

这里,TestFragment 必须等待MainActivity

我与来源的相关答案是here 就是这样:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多