タブ内で入力できないときの対処法

アプリのなかでタブエディットテキストなどの文字入力するビューを組み合わせて使う場合にタブがエディットテキストのフォーカスを奪ってしまう場合があります。

例えば下の画像のようにあるタブにエディットテキストなどの文字入力するビューがあるとします。

タブ内にエディットテキストを配置した例

この場合、エディットテキストに何か入力しようとすると次のようにタブの方にフォーカスが移ってしまいます。

タブがエディットテキストのフォーカスを奪った瞬間の画像

これはAndroidのバグらしく、次のようにEditTextOnTouchListenerを設定してあげることで解決できます。

public class MyFragment extends Fragment 
{
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle saveInstanceState)
    {
        final View view = inflater.inflate(R.layout.tab1_fragment, container, false);

        final EditText edit_text = (EditText) view.findViewById(R.id.edit);
        OnTouchListener focus_listener = new OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                v.requestFocusFromTouch();
                return false;
            }    
        };
        edit_text.setOnTouchListener(focus_listener);
    }
}

requestFocusFromTouchメソッドをエディットテキストがタッチされたときに呼び出せばタブにはフォーカスが移らなくなり入力が可能になります。

関連項目
プライバシーポリシー