Tôi có một FragmentActivitysử dụng một ViewPagerđể phân phát một số mảnh. Mỗi là một ListFragmentvới bố cục sau:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<EditText android:id="@+id/entertext"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
Khi bắt đầu hoạt động, bàn phím mềm sẽ hiển thị. Để khắc phục điều này, tôi đã thực hiện như sau bên trong đoạn:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Save the container view so we can access the window token
viewContainer = container;
//get the input method manager service
imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
. . .
}
@Override
public void onStart() {
super.onStart();
//Hide the soft keyboard
imm.hideSoftInputFromWindow(viewContainer.getWindowToken(), 0);
}
Tôi lưu ViewGroup containertham số đến từ onCreateViewnhư một cách để truy cập mã thông báo cửa sổ cho hoạt động chính. Này chạy mà không có lỗi, nhưng bàn phím không được ẩn từ các cuộc gọi đến hideSoftInputFromWindowtrong onStart.
Ban đầu, tôi đã thử sử dụng bố cục tăng cao thay vì container:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
nhưng điều này đã tạo ra một NullPointerException, có lẽ vì bản thân phân đoạn không phải là một hoạt động và không có mã thông báo cửa sổ duy nhất?
Có cách nào để ẩn bàn phím mềm khỏi một phân mảnh hay tôi nên tạo một phương thức trong FragmentActivityvà gọi nó từ bên trong phân mảnh?