9

2つのフラグメントを持つViewPagerを含むAndroidアプリがあります。最初のフラグメントには、EditTextフィールドが含まれています。アプリが起動すると、そのフィールドにすぐにフォーカスが移り、ソフトキーボードが起動します(これは私がやりたいことです)。2番目のフラグメントには、リストのみが含まれます(編集可能なテキストフィールドは含まれません)。フラグメント1からフラグメント2にスワイプすると、キーボードが消えます。私が試したことは何もうまくいかないようです。キーボードは表示されたままになるだけでなく、フラグメント1のEditTextフィールドを更新し続けます。

キーボードを非表示にするために間違ったコードを使用しているか、間違った場所に配置していると思います。誰かが正しい実装の例を投稿できるなら、それは大いにありがたいです!

私の最近の試みは、フラグメント1のonDetach()メソッドにキーボードを非表示にするコードを配置することでした。

@Override
public void onDetach()
{
    super.onDetach();

    InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE);

    // I'VE TRIED ALL THREE BELOW, NONE OF THEM WORK...

        // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(), 0);
        // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
4

3 に答える 3

12

この答えを参照してください。基本的に、ViewPagerOnPageChangeListenerでキーボードを非表示にする必要があります。(スワイプアニメーションをスムーズに保ちたい場合は、onPageScrollStateChanged代わりにこれを実行してくださいonPageSelected。)

@Override
public void onPageScrollStateChanged(int state)
{
    if (state == ViewPager.SCROLL_STATE_IDLE)
    {
        if (mViewPager.getCurrentItem() == 0)
        {
            // Hide the keyboard.
            ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);
        }
    }
}
于 2013-10-30T15:35:30.057 に答える
0

AndroidManifestで、アクティビティ宣言android:windowSoftInputMode = "stateHidden"に追加する必要があります:

<activity 
        android:name="YourActivity"            
        android:windowSoftInputMode="stateHidden">           
</activity>

そして、レイアウトでEditTextの子から削除しますrequestFocus:

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="15dp"
    android:ems="10" >
    <requestFocus />
</EditText>
于 2012-08-28T22:04:18.050 に答える
0
    getActivity().getWindow().setSoftInputMode(
                  WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
于 2013-11-29T09:55:17.280 に答える