我有一个简单的
ViewPager2
,由2个Fragment
组成
fragmentsList.add(new FakeFragment());
fragmentsList.add(new TextFragment());
viewPagerAdapter = new ViewPagerAdapter(this, fragmentsList);
viewPager.setAdapter(viewPagerAdapter);
viewPager.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
Log.d(TAG, "onPageScrollStateChanged: onPageScrollState ");
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
Log.d(TAG, "onPageScrolled: onPageScrolled ");
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
Log.d(TAG, "onPageSelected: onPageSelected ");
}
});
在 TextFragment 中我有一个基本的
EditText
。
问题:
当我点击它时,
EditText
光标焦点立即被杀死,我可以在我的日志中观察到这一点:
2020-10-27 16:34:31.202 23177-23177/com.example.mytestapp D/MainActivity: onPageScrolled: onPageScrolled
2020-10-27 16:34:31.217 23177-23177/com.example.mytestapp D/MainActivity: onPageScrolled: onPageScrolled
ViewPager2
回调 OnPageScrolled
和 OnPageSelected
在 EditText 单击时调用,然后删除其焦点,因为由于某种原因视图寻呼机根据日志“滚动”。
经过几次测试,我发现问题与查看寻呼机方向和变压器有关:
viewPager.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
当我删除这条线时,
EditText
在默认水平方向上不再失去光标焦点。
如果我将自定义变压器添加到默认方向,我会再次失去焦点。
如果有人遇到同样的问题可以告诉我如何解决吗?
此问题是 ViewPager2 的一个已知错误,已于 2019 年部分修复。但是,一些用户仍然遇到它(请参阅问题跟踪器上的最新评论)。就我个人而言,我在使用硬件键盘导航应用程序时遇到了这个错误。
Kiwi Lin 提出的解决方案对我有用:
viewPager.setOffscreenPageLimit(1)