我有一个片段,我们称之为FragmentA
。在FragmentA
中,我启动一个活动,它改变了我在FragmentA
中显示的数据,一旦我完成了我启动的活动,我就会返回到FragmentA
。问题是,发生这种情况时,FragmentA
仍然显示旧数据。因此,我试图在 onResume 中用自己的新实例替换FragmentA
,但无济于事,因为现在FragmentA
会导致整个视图页(它所属)冻结。
这是我的代码:
@Override
public void onResume() {
super.onResume();
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.detach(this);
fragmentTransaction.attach(this);
fragmentTransaction.commit();
}
我还尝试用以下代码替换FragmentA
:
@Override
public void onResume() {
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
FragmentA fragment = FragmentA.newInstance();
fragmentTransaction.replace(ID?, fragment);
fragmentTransaction.commit();
}
但我不知道如何检索"ID?"以在fragmentTransaction.replace
中使用。我对Android相当陌生,我仍然不确定如何做某些事情。提前谢谢你。
假设片段A由ActivityA启动。现在,从片段 A 开始活动 B 您可以使用 startActivityForResult 来启动 ActivityB 并在 FragmentA 内部方法中接收数据:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
在这里,您可以根据需要更新片段A。
它很冻结,因为你创建了一个创建新FragmentA
的无限循环。我找不到代表这一点的图片,所以这是我能做的最好的事情:
- 创建并显示
FragmentA
。 - 当
FragmentA
变得可见时,它的onResume
被称为,因此请创建另一个FragmentA
。 - 然后,此第 2 个
FragmentA
变得可见,并且其onResume
称为 因此创建一个第 3 个FragmentA
。
这个循环将永远持续下去,这可能是它冻结的原因。您希望使用startActivityForResult
,就像曹@Victor解释是他的答案,并且不要在这样的生命周期方法之一中创建任何活动或片段的新实例。
作为新手,我还建议阅读有关片段和活动生命周期的文档,并充分了解它们的工作原理以及何时调用它们,因为这是每个 android 开发人员都需要了解的基本理解。
我需要提到的第一件事是,最好在片段中使用片段。 如果是这样,您可以将该片段替换为
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack if needed
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
您将有一个容器来容纳片段,您必须对其进行充气,并提供该ID以进行替换。
然后如果你想使用活动本身,没有问题,如果你在放置片段的父活动的 Resume() 上编写该代码,它将起作用。
请通过这个问题 如何在片段类中启动活动
并推荐这些网站 http://www.oodlestechnologies.com/blogs/Tabs-Activities-inside-Fragment-Activity
只需更新onResume()
方法中的数据FragmentA