2

我一直在使用 jfeinstein 的SlidingMenu。我目前正在尝试查找用户是否可以看到某个片段。我第一次尝试:

    if(mainfrag.isVisible()){
        Log.d("Frag","Main is visible");
    }else{
        Log.d("Frag","Main is NOT visible");
    }

它总是打印出片段不可见。然后我尝试了:

android.support.v4.app.FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
Log.d("Frag","CurFrag: "+fragmentManager.findFragmentById(R.id.content_frame).toString());

MainFragment mf = new MainFragment();
if(fragmentManager.findFragmentById(R.id.content_frame) == mf){
    Log.d("Frag","This is Main");

}else{
    Log.d("Frag","This is NOT Main :(");

}

这打印

在此处输入图像描述

所以我知道它findFragmentById会告诉我当前的片段,但我不知道如何在逻辑上比较它,所以只有当它可见时我才能做事。

4

2 回答 2

7

我从来没有深入研究过 SlidingMenu 的细节,也无法告诉你第一个问题出了什么问题。

但是在第二个问题中,您正在比较两个不同的对象。

MainFragment mf = new MainFragment();
fragmentManager.findFragmentById(R.id.content_frame) == mf

在这里,您创建一个新的 MainFragment,并尝试将其与旧实例进行比较。它永远不可能是真的。比较对象时,比较地址。只有当它们是相同的对象时,它才会返回 true。

如果您只想检查对象的类,请使用以下代码:

Fragment f = fragmentManager.findFragmentById(R.id.content_frame);
if(f instanceof MainFragment)
    // code here.
于 2013-08-31T02:54:53.143 回答
0

通过标签或 Id 获取片段

获取片段的视图

获取视图上的窗口可见性将提供可见性

于 2013-08-31T03:14:18.590 回答