EditText 在 ViewPager2 内失去光标焦点

问题描述 投票:0回答:1

我有一个简单的

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
在默认水平方向上不再失去光标焦点。

如果我将自定义变压器添加到默认方向,我会再次失去焦点。

如果有人遇到同样的问题可以告诉我如何解决吗?

android android-edittext android-viewpager focus orientation
1个回答
0
投票

此问题是 ViewPager2 的一个已知错误,已于 2019 年部分修复。但是,一些用户仍然遇到它(请参阅问题跟踪器上的最新评论)。就我个人而言,我在使用硬件键盘导航应用程序时遇到了这个错误。

Kiwi Lin 提出的解决方案对我有用:

viewPager.setOffscreenPageLimit(1)

© www.soinside.com 2019 - 2024. All rights reserved.