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初学者略增加了学习成本。