gpt4 book ai didi

android - BroadcastReceiver 以便将数据从另一个 Activity 传递到 Fragment

转载 作者:行者123 更新时间:2023-11-30 01:41:32 26 4
gpt4 key购买 nike

假设我有 MainActivity,其中 ViewPager 中的 Fragment 很少。我想将数据从另一个 Activity 传递到这些 fragment 之一。我正在通过 BroadcastReceiver 执行此操作。

public class MyFragment extends Fragment {

private MyFragmentReceiver mReceiver;

public MyFragment() {
super();
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReceiver = new MyFragmentReceiver();
getActivity().registerReceiver(mReceiver, new IntentFilter("fragmentUpdater"));
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_my, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// My code here
}

public class MyFragmentReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
//My methods
}

}

@Override
public void onDestroy() {
super.onDestroy();
if (mReceiver != null)
getActivity().unregisterReceiver(mReceiver);
}
}

所以在我的 AnotherActivity 中我正在做这样的事情:

Intent data = new Intent("fragmentUpdater");
MyApplication.getInstance().getMainActivity().sendBroadcast(data);

其中 MyApplication 是包含 MainActivity 的单例。我注意到 BroadcastReceiver 正在将某些内容放入日志中,我想知道这是最好的方法。

  1. 是否有更好的方法将数据从另一个 Activity 传递到特定 Fragment 或调用该 Fragment 中的方法?
  2. 我是否必须在 AndroidManifest.xml 中包含与 BroadcastReceiver 相关的内容?

最佳答案

一种替代方法是使用一个接口(interface)在您的 Activity 和 fragment 之间进行通信。示例:

界面

public interface MyInterface {

void setSomeValue(int someValue);
int getSomeValue();

}

Activity

public class MyActivity extends Activity implements MyInterface {

private int someValue;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// do the usual stuff
}

// implement from MyInterface
@Override
public void setSomeValue(int someValue) {
this.someValue = someValue;
}

// implement from MyInterface
@Override
public int getSomeValue() {
return someValue;
}

}

fragment

public class MyFragment extends Fragment {

private MyInterface mi;

@Override
public void onAttach(Context context) {
super.onAttach(context);
mi = (MyInterface) context;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

mi.setSomeValue(20);
int someValue = mi.getSomeValue();

}

}

您可以使用该接口(interface)在一个或多个 Activity 、多个 fragment 、 View 、任务、服务等之间进行通信。如果您要走这条路,我会创建一个实现 MyInterface 及其方法的基本 Activity ,并让所有其他 Activity 扩展基本 Activity 。我什至会创建一个调用 onAttach() 的基本 fragment ,并让我的所有其他 fragment 扩展这个基本 fragment (这样我就不需要在每个 fragment 中调用 onAttach())。

更新...

基本 fragment 看起来像这样:

public class BaseFragment extends Fragment {

public MyInterface mi;

@Override
public void onAttach(Context context) {
super.onAttach(context);
mi = (MyInterface) context;
}

}

现在,MyFragment 将只是扩展 BaseFragment...

public class MyFragment extends BaseFragment {
...
}

现在不需要在任何扩展 BaseFragment 的 fragment 中附加甚至声明 MyInterface,基本 fragment 已经有它的公共(public)实例。您只需通过您的界面设置/获取/等,无需任何额外的麻烦:

mi.setSomeValue(20);

关于android - BroadcastReceiver 以便将数据从另一个 Activity 传递到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442782/

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