如果打印片段: println("fragment: ${Fragment()}")
它打印出: Fragment{8d157db} (d63150f2-7497-4c04-9214-d20c3ccaba34)
看看《公约》的执行情况 toString()
,我可以看到:
public String toString() {
StringBuilder sb = new StringBuilder(128);
Class<?> cls = getClass();
sb.append(cls.getSimpleName());
sb.append("{");
sb.append(Integer.toHexString(System.identityHashCode(this)));
sb.append("}");
sb.append(" (");
sb.append(mWho);
if (mFragmentId != 0) {
sb.append(" id=0x");
sb.append(Integer.toHexString(mFragmentId));
}
if (mTag != null) {
sb.append(" tag=");
sb.append(mTag);
}
sb.append(")");
return sb.toString();
}
所以 UUID
它的印刷是从 mWho
使用以下命令生成的变量:
// Internal unique name for this fragment;
@NonNull
String mWho = UUID.randomUUID().toString();
是否有方法获取此值以用作 tag
使用时 supportFragmentManager.findFragmentByTag
? 无需解析 toString
一串
我这样问是因为现在我有自己的自定义uniqueuuid,用于使用 retainInstance
. 如果我能拿到 mWho
,我不需要为uniqueuuid使用自己的自定义代码。
1条答案
按热度按时间xhv8bpkk1#
我能够使用反射和惰性变量实现这一点:
注意使用
superclass.superclass
因为我把它放在Fragment
. 使用lazy
防止每次需要反射时使用反射,因为该值在初始化后不会更改。