我有一个片段,我们称之为FragmentA
。在FragmentA
内,我启动了一个Activity,它会更改我在FragmentA
中显示的数据,一旦我完成了我已启动的活动,我就会返回FragmentA
。问题是,当发生这种情况时,FragmentA
仍会显示旧数据。所以,我尝试用onResume中的新实例替换FragmentA
,但无济于事,因为现在FragmentA
导致整个viewpager(它属于它)冻结。
这是我的代码:
@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很陌生,而且我还不确定如何做某些事情。提前谢谢。
答案 0 :(得分:1)
假设FragmentA由ActivityA启动。现在,从FragmentA开始,您将启动ActivityB 您可以使用startActivityForResult启动ActivityB并在FragmentA内部方法中接收数据:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
在这里,您可以根据需要更新FragmentA。
答案 1 :(得分:0)
它冻结了,因为你创造了一个创造新FragmentA
的无限循环。我无法找到代表这一点的图片,所以这是我能做的最好的事情:
答案 2 :(得分:-1)
只需使用cdnsite.com
onResume()
方法更新数据即可
答案 3 :(得分:-1)
我需要提到的第一件事是,更好地利用片段内的片段。 如果是这样,您可以用
替换该片段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。
然后,如果你想自己使用活动,没有问题,如果你在放置片段的父活动的onResume()上编写代码,它将会起作用。
请仔细阅读这个问题 How to start an Activity inside a Fragment class
并参考这些网站 http://www.oodlestechnologies.com/blogs/Tabs-Activities-inside-Fragment-Activity