Android比较两个 fragment

标签 android fragment

当我更改 fragment 时,我想将新 fragment 与当前 fragment 进行比较。如果相同,则无需更换。

我试过了

 public void displayFragment(Fragment fragment){
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
    if(!currentFragment.equals(fragment))
        getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.content_frame, fragment).commit();
}

但它不起作用,即使新 fragment 相同, fragment 也会更改

解决方案? 谢谢

编辑

解决方案:

public void displayFragment(Fragment fragment){
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
    if(!fragment.getClass().toString().equals(currentFragment.getTag())){
        getSupportFragmentManager()
        .beginTransaction()
        .addToBackStack(null)
        .replace(R.id.content_frame, fragment, fragment.getClass().toString()) // add and tag the new fragment
        .commit();
    }
}

最佳答案

识别 fragment 的一种方法是给它们标签:

public void displayFragment(Fragment fragment, String tag){
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
    if(!tag.equals(currentFragment.getTag())
        getSupportFragmentManager()
        .beginTransaction()
        .addToBackStack(null)
        .replace(R.id.content_frame, fragment, tag) // add and tag the new fragment
        .commit();
}

编辑:psv 评论的替代版本,使用类名作为标签:

public void displayFragment(Fragment fragment){ 
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
    if(!fragment.getClass().toString().equals(currentFragment.getTag()))
    { 
        getSupportFragmentManager()
        .beginTransaction()
        .addToBackStack(null)
        .replace(R.id.content_frame, fragment, fragment.getClass().toString()) // add and tag the new fragment
        .commit(); 
    }
} 

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

相关文章:

java - 使用自定义 ArrayAdapter 时获取 ClassCastException

java - 在 Android 中使用 IExtendedNetworkService 获取 USSD 响应

android - 将演示者传递给 Android 中的 fragment (没有构造函数)

java - 替换不调用 onAttach、onCreate、onCreateView 等的 Activity 中的 fragment

java - 如何通过 Socket Java 传输数据

java - getLoaderManager.initLoader 出现恼人的错误

android - 多次在 ViewPager 中使用一个 Fragment

android - 透明警报对话框

java - Android:HttpGet 不发布到数据库

Android - 在开始 Intent 之前检查互联网连接