============問題描述============android
問題背景,一個頂層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。
問題是:
一、當程序開始運行,載入默認fragment後,光標會停留在第一個edittext中,點擊這個edittext,輸入框會調出,點擊空白處,輸入框消失。可是當上方按鈕後,首先輸入框沒有隱藏掉,在點擊空白處,也沒有隱藏。。這是爲何?觀察後發現,當點擊上方按鈕後,edittext中的光標已消失,這個時候焦點集中在button上。。難道輸入框的隱藏,前提是當前焦點必須在edittext上?
二、當點擊其餘按鈕,切換到其餘fragment後,這個screen的ontouchlistener徹底失效,這又是爲啥呢?按道理無論第二個子linearlayout裏面換什麼fragment,都是屬於頂級linearlayout的啊,只要監聽頂級linearlayout的事件,應該均可以捕獲到啊。。
求各位大神解答。。
============解決方案1============ide
http://blog.csdn.net/yskang/article/details/39012127
============解決方案2============this
看着頭都昏了,把這個setOnTouchListener寫進父類fragment裏面把,而後子fragment繼承他