获取当前可见的Android Fragment

Posted

技术标签:

【中文标题】获取当前可见的Android Fragment【英文标题】:Get the current visible Fragment Android 【发布时间】:2014-10-30 06:31:16 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

看看这个例子: https://***.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);
        
    
);

【讨论】:

实现 GetActionBarTitle 给我错误,我不能使用它。【参考方案2】:

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

在片段中,只需将 Activity 转换为您的并调用方法。

例如在YourActivity中声明方法:

public void refreshMe()
...

因此,您可以在片段中调用:

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

【讨论】:

好的。什么时候可以调用这个方法? @user3793870 在 onAcivityCreated() 例如

以上是关于获取当前可见的Android Fragment的主要内容,如果未能解决你的问题,请参考以下文章

Android 判断当前Fragment是否可见(Visible)

如何获取屏幕的宽度

如何获取回收站当前可见项目位置

wxPython - StyledTextCtrl 获取当前可见的行

在Android中获取可见地图的半径

IGListKit:获取当前可见的单元格索引