gpt4 book ai didi

android - 将监听器重置为重新创建的 fragment 的父 Activity

转载 作者:搜寻专家 更新时间:2023-11-01 08:01:09 27 4
gpt4 key购买 nike

我正在使用一种模式,其中 Activity 是其 fragment 的监听器。我创建附加这些 fragment 的原始方式是这样的:

MyFragment myFragment = new MyFragment(param1, param2)
myFragment.setListener(this);
getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, myFragment).commit()

但我了解到这是错误的,我应该使用静态 newInstance() 方法创建 fragment ,以防 fragment 被破坏,然后它可以从包中重新创建。这将使我保留参数,但我的问题是如何将 fragment 的监听器设置为它的父 Activity ,在它被销毁然后重新创建之后?

是否像调用一样简单:

setListener((MyActivity) getActivity());

fragment 内?这对我来说似乎是错误的,因为它将 fragment 与其父 Activity 强烈耦合。

最佳答案

这绝对是错误的路线。你应该让你的 Activity 实现 Fragment 的接口(interface)(看起来你已经实现了,但我还是会展示一个例子)。然后,在 Fragment 中,在 onAttach() 中将 Activity 转换到监听器,并在 onDetach() 中释放它。一个简单的例子是:

fragment

public class ExampleFragment extends Fragment {
private MyFragmentInterface mInterface;

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

if (activity instanceof MyFragmentInterface) {
mInterface = (MyFragmentInterface) activity;
} else {
throw new IllegalArgumentException("Parent Activity must implement MyFragmentInterface.");
}
}

@Override
public void onDetach() {
super.onDetach();
mInterface = null;
}

private void fireOnSomethingHappened () {
if (mInterface != null) {
mInterface.onSomethingHappened();
}
}

public static interface MyFragmentInterface {
void onSomethingHappened();
}
}

Activity

public class ExampleActivity extends Activity implements ExampleFragment.MyFragmentInterface {
@Override
public void onSomethingHappened() {
//Handle the event
}
}

关于android - 将监听器重置为重新创建的 fragment 的父 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com