我一直在使用 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 :(");
}
这打印
所以我知道 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/