Java
public final void onCheckedChanged(RadioGroup radioGroup, int i) {
Intrinsics.checkExpressionValueIsNotNull(radioGroup, "group");
View findViewById = radioGroup.findViewById(i);
if (findViewById != null) {
int indexOfChild = radioGroup.indexOfChild((RadioButton) findViewById);
FragmentTransaction beginTransaction = getSupportFragmentManager().beginTransaction();
Intrinsics.checkExpressionValueIsNotNull(beginTransaction, "supportFragmentManager.beginTransaction()");
String str = getClass().getSimpleName() + '_' + indexOfChild;
Fragment findFragmentByTag = getSupportFragmentManager().findFragmentByTag(str);
if (findFragmentByTag == null) {
findFragmentByTag = SubjectDetailFragment.Companion.newInstance();
beginTransaction.add(R.id.subjectsContainer, findFragmentByTag, str);
}
FragmentManager supportFragmentManager = getSupportFragmentManager();
Intrinsics.checkExpressionValueIsNotNull(supportFragmentManager, "supportFragmentManager");
List<Fragment> fragments = supportFragmentManager.getFragments();
Intrinsics.checkExpressionValueIsNotNull(fragments, "supportFragmentManager.fragments");
for (Fragment fragment : fragments) {
Intrinsics.checkExpressionValueIsNotNull(fragment, "it");
if (Intrinsics.areEqual((Object) str, (Object) fragment.getTag())) {
beginTransaction.show(findFragmentByTag);
} else {
beginTransaction.hide(findFragmentByTag);
}
}
beginTransaction.commitAllowingStateLoss();
return;
}
throw new TypeCastException("null cannot be cast to non-null type android.widget.RadioButton");
}
Kotlin
binding.subjects.setOnCheckedChangeListener { radioGroup, checkedId ->
val indexOfChild =
radioGroup.indexOfChild(radioGroup.findViewById(checkedId) as RadioButton)
val beginTransaction = supportFragmentManager.beginTransaction()
val tag = this@SubjectsActivity.javaClass.simpleName + '_' + indexOfChild
var findFragmentByTag = supportFragmentManager.findFragmentByTag(tag)
if (findFragmentByTag == null) {
findFragmentByTag = SubjectDetailFragment.newInstance()
beginTransaction.add(R.id.subjectsContainer, findFragmentByTag, tag)
}
val fragments = supportFragmentManager.fragments
for (fragment in fragments) {
if (tag == fragment.tag) beginTransaction.show(findFragmentByTag)
else beginTransaction.hide(findFragmentByTag)
}
beginTransaction.commitAllowingStateLoss()
}
可以發現Kotlin做了大量的非空判斷,無疑在精簡代碼的同時保證了程序的健壯性
Intrinsics.checkExpressionValueIsNotNull
當然這在反編譯閱讀源碼是也降低了程序的可讀性,對於Java初學者略增加了學習成本。