首页 > 代码库 > 求问各位大神关于fragment切换,软键盘隐藏的问题

求问各位大神关于fragment切换,软键盘隐藏的问题

============问题描述============


问题背景,一个顶层linearlayout下面有个两个子linearlayout,第一个子linearlayout里面给一排button,可以水平滑动,第二个子linearlayout里面用来放fragment,xml如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/screen" >
    <LinearLayout
        android:id="@+id/top"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="#ffff00"
                android:orientation="horizontal" >
                <Button
                    android:id="@+id/button1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
                <Button
                    android:id="@+id/button2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </LinearLayout>
        </HorizontalScrollView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/center"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:orientation="vertical" >
    </LinearLayout>
</linearlayout>
默认载入一个fragment,里面放几个edittext,用于输入一些信息。在mainactivity里面给顶级linearlayout注册一个ontouchlistener:
 screen.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                // TODO Auto-generated method stub
                InputMethodManager imm = (InputMethodManager)VillageActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(screen.getWindowToken(), 0);
                //imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);   
                return false;
            }
        });
同时给几个button注册click事件,点击不同button切换不同fragment,fragment里面也都是一些edittext。

问题是:
1、当程序开始运行,载入默认fragment后,光标会停留在第一个edittext中,点击这个edittext,输入框会调出,点击空白处,输入框消失。但是当上方按钮后,首先输入框没有隐藏掉,在点击空白处,也没有隐藏。。这是为什么?观察后发现,当点击上方按钮后,edittext中的光标已消失,这个时候焦点集中在button上。。难道输入框的隐藏,前提是当前焦点必须在edittext上?
2、当点击其他按钮,切换到其他fragment后,这个screen的ontouchlistener完全失效,这又是为啥呢?按道理不管第二个子linearlayout里面换什么fragment,都是属于顶级linearlayout的啊,只要监听顶级linearlayout的事件,应该都可以捕获到啊。。

求各位大神解答。。

============解决方案1============


http://blog.csdn.net/yskang/article/details/39012127

============解决方案2============


看着头都昏了,把这个setOnTouchListener写进父类fragment里面把,然后子fragment继承他

求问各位大神关于fragment切换,软键盘隐藏的问题