背景:ScrollView嵌套PreferenceFragment。我使用的版本Preference的树的支撑是通过RecyclerView。
原因:在Activity的setContentView方法中,解析了Fragment,并调用了PreferenceFragmentCompat的onCreateView方法,方法后面post了一个Runnable。
通过调用父View的focusableViewAvailable方法后,会进入ViewRootImpl
可以看见如果当前以mView为根节点的树没有focusedView时,那么当前的View v就会去申请Focus。v就是RecyclerView,可气的是他的配置信息还允许他获取Focus。
在requestFocus中ScrollView重写了requestChildFocus方法。