कई अंशों की सेवा के लिए मेरे पास एक FragmentActivity
उपयोग है ViewPager
। प्रत्येक ListFragment
निम्नलिखित लेआउट के साथ है:
<?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>
गतिविधि शुरू करते समय, नरम कीबोर्ड दिखाता है। इसे दूर करने के लिए, मैंने टुकड़े के अंदर निम्नलिखित कार्य किए:
@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);
}
मैं मुख्य गतिविधि के लिए विंडो टोकन तक पहुंचने के तरीके के रूप में आने वाले ViewGroup container
पैरामीटर को बचाता हूं onCreateView
। यह बिना किसी त्रुटि के चलता है, लेकिन कीबोर्ड कॉल से hideSoftInputFromWindow
इन में छिपा नहीं है onStart
।
मूल रूप से, मैंने इसके बजाय फुले हुए लेआउट का उपयोग करने की कोशिश की container
, अर्थात:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
लेकिन यह एक NullPointerException
माना जाता है , शायद क्योंकि टुकड़ा ही एक गतिविधि नहीं है और एक अद्वितीय विंडो टोकन नहीं है?
क्या किसी खंड के भीतर से नरम कीबोर्ड को छिपाने का एक तरीका है, या क्या मुझे टुकड़े में एक विधि बनानी चाहिए FragmentActivity
और इसे खंड के भीतर से कॉल करना चाहिए ?