Tôi có một FragmentActivity
sử dụng một ViewPager
để phân phát một số mảnh. Mỗi là một ListFragment
vớ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 container
tham số đến từ onCreateView
như 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 hideSoftInputFromWindow
trong 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 FragmentActivity
và gọi nó từ bên trong phân mảnh?