gpt4 book ai didi

android - 即使不在 View 中也能保持 Fragments Broadcast Receivers 处于 Activity 状态

转载 作者:行者123 更新时间:2023-11-29 00:19:11 26 4
gpt4 key购买 nike

我有一个包含两个 fragment 的 Activity ,在给定时间仅显示两个 fragment 中的一个,由用户确定。两个 fragment 都通过广播接收器订阅数据。

Activity 使用 fragment 管理器的 replace() 方法管理显示哪个 fragment ,例如

getFragmentManager().beginTransaction().replace(R.id.north_fragment, fragment1, FRAGMENT_TAG).commit();

广播接收器在 fragment 的 onCreateView() 覆盖中注册:广播接收器按预期接收适当的数据。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_spectrum_analyzer_graph, container, false);

setupGraphView(rootView);

// register for Spectrum Frame Response messages
myReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive()");
// do stuff
}
}

广播接收器在 onDestroyView() 中未注册,例如:

@Override
public void onDestroyView() {
super.onDestroyView();
getActivity().unregisterReceiver(m_spectrumDataFrameReceiver);
}

有没有办法让 fragment 通过 BroadcastReceiver 接收数据,即使它不可见(在它被销毁之后)?我希望接收器继续获取数据并将其存储在 fragment 中,即使 fragment 不可见(但 Activity 可见),但我知道我需要在某个时候注销广播接收器。

是否应在 Activity 被销毁(调用其 Activity 以注销)时注销,还是为时已晚?我对错综复杂的 Fragment 生命周期还很陌生,不太确定该怎么做。

最佳答案

不必每次都替换每个 fragment ,只需使用add方法 fragment 事务,这样它在不可见时仍然存在。

解决方法:

替换 replace 使用 add

beginTransaction().add(R.id.north_fragment, fragment1, FRAGMENT_TAG).commit();

关于android - 即使不在 View 中也能保持 Fragments Broadcast Receivers 处于 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088179/

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