获取当前可见的片段Android

时间:2014-09-05 10:15:45

标签: android fragment fragmentmanager

我有片段A - > B - > C - > D.使用方法onCreateView的每个片段都会更改主Activity中的String变量。 从A到B或C或D一切正常,但是当我按下后退按钮时 - 例如从C到B-我需要将MainActivity的变量刷新到正确的值。我怎样才能做到这一点? onResume(),onStart(),当我回到之前的片段时,不会调用onCreateView。

编辑,B C D是同一个Class'片段,可以是片段,因为我正在实现一个文件夹目录,带有B C D子文件夹目录。我认为我不能使用标签,因为我不知道我有多少片段。

2 个答案:

答案 0 :(得分:2)

看看这个例子: https://stackoverflow.com/a/24042109/2413303

基本上,在Fragment的构造函数中指定资源ID:

public MyFragment()
{
    super();
    titleId = R.string.drawer_myfragment_title;
}

添加以下界面(在编辑中添加):

public interface GetActionBarTitle
{
    int getActionBarTitleId();
}

使用界面返回:

public class MyFragment extends Fragment implements GetActionBarTitle
{
   private int titleId;

   @Override
   public int getActionBarTitleId()
   {
       return titleId;
   }
}

在活动中,将以下内容添加到onCreate()方法:

getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener()
{
    public void onBackStackChanged()
    {
        int backCount = getSupportFragmentManager().getBackStackEntryCount();
        if (backCount == 0)
        {
            finish();
        }
        else
        {
            Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);
            mTitle = getString(((GetActionBarTitle) fragment).getActionBarTitleId());
            getSupportActionBar().setTitle(mTitle);
        }
    }
});

答案 1 :(得分:0)

您可以在YourActivity中声明方法以进行刷新。

在片段中只是将Activity转换为你的并调用方法。

例如,在YourActivity声明方法中:

public void refreshMe(){
...
}

因此,在您的片段中,您可以致电:

((YourActivity)getActivity()).refreshMe();