5

私は長い間 ViewPager を使用してきましたが、今朝、ViewPager 内に NumberPicker を含めようとしました。

私が直面している大きな問題は、viewpager をスワイプしようとすると、NumberPicker を除いてどこでも機能することです。

私は本当にこの行動を理解していません!

たとえば、ListView は問題ありません。水平方向のスワイプは ViewPager によって処理され、垂直方向のスワイプは List によって処理されます。NumberPickerでも同じことを期待していました。NumberPicket が水平スワイプを処理する理由はありません

コードは非常に簡単です。ここに投稿します。

    ViewPager mPager = (ViewPager) findViewById(R.id.pager);
    if (mPager != null) 
        mPager.setAdapter(mAdapter);

    ()...
class TabsAdapter extends FragmentPagerAdapter {
        public TabsAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return TITLES.length;
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new FragmentAccueil();
            case 1:
                return new FragmentRecherche();
            case 2:
                return new FragmentFav();
            }
            return null;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            if (position == 0)
                try {
                    return TITLES[position]+" "+a.getPackageManager().getPackageInfo(
                            a.getPackageName(), 0).versionName;
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    return TITLES[position];
                }
            else
                return TITLES[position];
        }
    }

Fragment レイアウトには NumberPicker が含まれています。

   <NumberPicker
        android:id="@+id/numberPicker1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
4

2 に答える 2

1

これは非常に古いことはわかっていますが、まだ最初の検索結果なので、将来の訪問者のために答えようと思いました.

問題は実際、NumberPicker 内の EditText にあります。このスワイプ ブロックは、ViewPager 内で他の EditText を使用する場合にも発生します。

これを修正するには、EditText の水平スクロールをプログラムで無効にする必要があります (Android >_< であるため、XML で無効にすることはできません)。

最初に NumberPicker の EditText の Android の内部 ID を見つけてから、水平スクロールを false に設定します。

int editTextId = Resources.getSystem().getIdentifier(
    "numberpicker_input", "id", "android");
((EditText) numberPicker.findViewById(editTextId)
    ).setHorizontallyScrolling(false);
于 2019-01-21T00:45:57.220 に答える