我做了一个简单的检查,以确保同一片段不会两次添加到我的堆栈中,假设单击菜单项。

public void addFragment(Fragment fragmentToBeAdded){
  Fragment topFragment = getCurrentTopFragment();
  //getCurrentTopFragment returns top visible fragment using findFragmentById
    if(!fragmentToBeAdded.getClass().getSimpleName()
     .equals(topFragment.getClass().getSimpleName()){
       //add fragmentToBeAdded
    }
}


现在,当然,第一个问题是这种方法是否正确?另外,它是如何导致潜在错误的,是当proguard将不同类的“简单名称”更改为同一字母时。在发行版本中,逻辑都折腾了。幸运的是,这还没有发布。

如果基本方法是完全正确的,事后看来,可以选择使用getName()代替getSimpleName()或使用instanceOf检查。请让我知道所有可以在这里更正的内容。

最佳答案

我认为这只是做事的错误方式。首选全限定类名是有原因的,这是唯一的。此外,我本应该进行一次instanceOf检查,这可能比字符串文字好。

10-02 04:41