当我们在Activity中添加一个Fragment时,我们通常会使用TAG作为它的id。
getFragmentManager().beginTransaction()
.add(containerResource, fragment, fragmentTAG).commit();
一般情况下我们都会选择类名作为这里的fragmentTag。为了简化,这里的类名并不包含包名。当然前提是我们知道项目中不同的包下没有重名的类。
public static final String TAG = MyClassFragment.class.getSimpleName();
当需要使用该fragment时,我们通过findFragmentByTag方法获取:
fragment = getFragmentManager().findFragmentByTag(tag);
一般情况下这样做是没有什么问题的,即使是在混淆后。
真的没有问题吗?
尽管类不同,但是它们还是可能使用相同的Tag。
How this happen?
假设现在有两个fragment,以及它们在混淆后的类名如下:
com.mypackage1.FragmentA → com.mypackage1.a
com.mypackage2.FragmentB → com.mypackage2.a
这样也是没有问题的,但是如果使用simple name
呢?
com.mypackage1.FragmentA → a
com.mypackage2.FragmentB → a
!!!
也许出现这种情况的概率并不是很大,但也是有可能出现的。
为了不出现这种情况,可以有如下几种解决方案:
- 使用
full name
- 使用别名
- 使用字符串常量