从片段到活动的onAttach回调

15

我想从fragmentactivity发送String数据。

我已经阅读了关于在Android开发者中fragment和activity之间通信的文章,使用onAttach回调函数。

有人能清楚地解释一下如何从fragment向activity发送数据吗?

1个回答

38

你应该像这样做。首先创建一个接口,用于与你的活动进行通信,例如:

public interface OnViewSelected {
public void onViewSelected(int viewId);
}

在你的onAttach方法中添加以下代码:

OnViewSelected _mClickListener;
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        _mClickListener = (OnViewSelected) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + " must implement onViewSelected");
    }
}

在你的Fragment实现OnClickListener,并且在你的onClick()方法中做如下操作:

在你的 Fragment 中实现 OnClickListener 接口,并在 onClick() 方法中执行以下操作:

@Override
public void onClick(View v) {
    _mClickListener.onViewSelected(456);
}

接下来,在您的Activity中,您需要实现在Fragment中创建的接口,并且它会要求您添加未实现的方法。在您的Activity中,您将有以下函数:

@Override
public void onViewSelected(int data) {
    Log.d("","data : "+data); // this value will be 456.
}

就这些了。:)


2
很好 :) Android框架生成了像你说的那样。现在我能够清楚地理解它了。 - hqt
因为在我看来,这是目前最好的方法,无论我是在一个Fragment中使用还是在很多个中使用。你的实现也可以工作,但我更喜欢接口 :) - hardartcore
5
为了确保您的片段可重用且不依赖于特定的 Activity,而是依赖于实现该监听器的组件,创建接口的原因(以及为什么 Android 教程要这样解释)。 - Thomas
1
截至目前,public void onAttach(Activity activity)已正式弃用。 - guness
@bluebrain,你可以使用public void onAttach(Context context) - hardartcore
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接