Android - 如何在自己的onResume中更新片段?

时间:2018-03-28 09:44:29

标签: android android-activity fragment onresume fragmenttransaction

我有一个片段,我们称之为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很陌生,而且我还不确定如何做某些事情。提前谢谢。

4 个答案:

答案 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的无限循环。我无法找到代表这一点的图片,所以这是我能做的最好的事情:

  1. 创建并显示FragmentA
  2. FragmentA变为可见时,会调用onResume,因此请创建另一个FragmentA
  3. 然后第二个FragmentA变为可见,其onResume被调用,因此创建第三个FragmentA
  4. 这个循环将永远持续,这可能是它冻结的原因。您希望使用startActivityForResult,如@Victor Cao解释是他的答案,不要在其中一个生命周期方法中创建任何活动或片段的新实例。

    成为新用户我还建议您阅读FragmentActivity生命周期中的文档,并了解它们如何工作以及何时被调用,因为这是每个Android开发人员需要的基本理解知道。

答案 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