Android如何比较 fragment ?

标签 android fragment slidingmenu

我一直在使用 jfeinstein 的 SlidingMenu .我目前正在尝试查找某个 fragment 是否对用户可见。我第一次尝试:

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

总是打印 fragment 不可见。然后我尝试了:

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 :(");

}

这打印

enter image description here

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

最佳答案

我从来没有深入研究过 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.

关于Android如何比较 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543444/

相关文章:

java - Android ProGuard 返回行号

Android - 在单个 Activity 中切换多个布局

android - SlidingMenu 在方向从横向更改为纵向时损坏

android - 无法触发在 ListPreference 中选择项目的操作

android - 如何创建好看的可绘制对象。

android - 谷歌地图 startActivityForResult

android - 系统杀死一个应用程序后, fragment 会发生什么?

Android - 3 次滑动后 Sherlock 内容消失

android - 如何使用 FragmentManager 在 FrameLayout 中显示 fragment A、B、C...?

java - 子点击时自动关闭滑动菜单