android.util.AndroidRuntimeException: requestFeature () सामग्री जोड़ने से पहले कॉल किया जाना चाहिए


82

मुझे यह android.util.AndroidRuntimeException: requestFeature() must be called before adding contentत्रुटि मिल रही है । जैसा कि आप नीचे दिए गए कोड में देख सकते हैं, लाइन कोड requestWindowFeature(Window.FEATURE_NO_TITLE);से पहले आती है setContentView(R.layout.mainmenu);। यह onCreate () कोड मेरी हर एक गतिविधि के बारे में एक ही प्रारूप है और मुझे अब तक इससे पहले कभी भी परेशानी नहीं हुई है। जब से मैंने ADT 22 को अपडेट किया है, हर जगह बहुत सारी यादृच्छिक त्रुटियाँ पॉप अप हो रही हैं। मैंने उन त्रुटियों के माध्यम से मातम किया है और यह मेरा नवीनतम है।

मैं इस त्रुटि को ठीक करने के लिए क्या कर सकता हूं?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.mainmenu);

LogCat

05-31 04:20:43.121: E/AndroidRuntime(14559): FATAL EXCEPTION: main
05-31 04:20:43.121: E/AndroidRuntime(14559): java.lang.RuntimeException: Unable to start activity ComponentInfo{matt.lyons.bibletrivia.lite/matt.lyons.bibletrivia.lite.MainMenu}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.os.Looper.loop(Looper.java:137)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at java.lang.reflect.Method.invokeNative(Native Method)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at java.lang.reflect.Method.invoke(Method.java:511)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at dalvik.system.NativeStart.main(Native Method)
05-31 04:20:43.121: E/AndroidRuntime(14559): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
05-31 04:20:43.121: E/AndroidRuntime(14559):    at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:229)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.Activity.requestWindowFeature(Activity.java:3244)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at matt.lyons.bibletrivia.lite.MainMenu.onCreate(MainMenu.java:28)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.Activity.performCreate(Activity.java:5104)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
05-31 04:20:43.121: E/AndroidRuntime(14559):    ... 11 more

क्या आप विस्तार से समझा सकते हैं? मुझे नहीं पता कि "थीम के माध्यम से" का अर्थ क्या है।
मैट

आप मेनिफेस्ट में ऐक्टिविटी टैग जैसे, एंड्रॉइड: थीम = "@ एंड्रॉइड: स्टाइल / थीम.नोटिटेलबर्ल.फुलस्क्रीन" के बजाय ऑनक्रीट में जावा कोड लिखने के लिए थीम लागू कर सकते हैं ।
विनेश चंद्रा

जवाबों:


183

मुझे भी इस समस्या का सामना करना पड़ा लेकिन जब मैंने super.onCreate () कॉल करने से पहले विंडो रिक्वेस्ट की तो समस्या हल हो गई, कृपया इसे भी देखें ..

@Override
public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainmenu);
}

आशा है कि यह आपकी मदद करेगा...:)


संपादित: Android के लिए अन्य संभावित समाधानों के लिए नए संस्करण

एंड्रॉइड 4.0 और लोअर पर स्टेटस बार छुपाएं

<application
    ...
    android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
    ...
</application>

गतिविधि विषय का उपयोग करने के लाभ इस प्रकार हैं:

  • प्रोग्राम को फ्लैग सेट करने की तुलना में इसे बनाए रखना और कम त्रुटि-रहित होना आसान है।
  • यह यूआई के बदलाव को आसान बनाता है, क्योंकि आपके ऐप की मुख्य गतिविधि को तत्काल करने से पहले सिस्टम को आपके यूआई को प्रस्तुत करने की आवश्यकता होती है।

Android संस्करण जेलीबीन की तुलना में कम है

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // If the Android version is lower than Jellybean, use this call to hide
    // the status bar.
    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
    setContentView(R.layout.activity_main);
}

Android 4.1 और उच्चतर पर स्थिति पट्टी छुपाएं

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();

निम्नलिखित पर ध्यान दें:

  • एक बार जब यूआई झंडे साफ़ हो गए हैं (उदाहरण के लिए, गतिविधि से दूर जाकर), तो यदि आप बार को छुपाना चाहते हैं, तो आपके ऐप को उन्हें रीसेट करना होगा। देखें यूआई दृश्यता परिवर्तन का जवाब देते यूआई दृश्यता में परिवर्तन के लिए इतना है कि अपने अनुप्रयोग तदनुसार जवाब कर सकते हैं कि सुनने के लिए की चर्चा के लिए।
  • जहां आप यूआई झंडे सेट करते हैं, उससे फर्क पड़ता है। यदि आप अपनी गतिविधि के ऑनक्रिएट () विधि में सिस्टम बार छिपाते हैं और उपयोगकर्ता होम दबाता है, तो सिस्टम बार फिर से दिखाई देंगे। जब उपयोगकर्ता गतिविधि को फिर से खोल देगा, तो onCreate () को कॉल नहीं किया जाएगा, इसलिए सिस्टम बार दिखाई देंगे। यदि आप चाहते हैं कि सिस्टम UI परिवर्तन आपकी गतिविधि के अंदर और बाहर नेविगेट करता रहे, तो यूआई झंडे को onResume () या onWindowFocusChanged () में सेट करें।
  • विधि setSystemUiVisibility () का केवल तभी प्रभाव पड़ता है जब आप जिस दृश्य से इसे कहते हैं वह दिखाई देता है।
  • दृश्य से दूर नेविगेट करने से सेटसिस्ट यूआई विजिबिलिटी () को साफ़ करने वाले झंडे सेट हो जाते हैं।

3
@clu यह requestFeature (int featureId) setContentView () से पहले बुलाया जाना चाहिए। जब तक यह सेटऑन्टेंट व्यू () से पहले हो, तब तक जितनी बार चाहें उतनी बार कॉल किया जा सकता है। यदि नहीं कहा जाता है, कोई विस्तारित सुविधाएँ उपलब्ध नहीं होंगी। एक बार अनुरोध करने के बाद आप किसी सुविधा को बंद नहीं कर सकते। अधिक विवरण के लिए यहां क्लिक करें
vishesh chandra

2
मैं requestWindowFeatureपहले फोन करने के खिलाफ सलाह दूंगा super.onCreate। आप उस बिंदु से पहले गतिविधि की स्थिति के बारे में निश्चित नहीं हो सकते।
vbence

@vishesh chandra क्या आप मेरे मामले में मदद कर सकते हैं यह मेरे लिए काम नहीं किया है stackoverflow.com/questions/27404146/…
साशा

3
समस्या का समाधान किया, लेकिन शीर्षक पट्टी अभी भी दिखाई देती है।
अरित्रा रॉय

हां, मेरे लिए भी एक्शन बार अभी भी दिखाई देता है
पार्थिबन एम

15

android.util.AndroidRuntimeException: requestFeature() must be called before adding contentउपयोग करते समय मुझे वह अपवाद मिला ( )

requestWindowFeature(Window.FEATURE_NO_TITLE);

Android 2.3.5 (जिंजरब्रेड) चलाने वाले पुराने डिवाइस में। मैं v7 समर्थन पुस्तकालय का उपयोग कर रहा हूं।

जब मैंने इसे उपयोग करने के लिए बदला तो त्रुटि ठीक हो गई:

supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

(यह मेरे सुपर.ऑनके्रट कॉल को ठीक करने के बाद भी आता है)। डॉक्स https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#supportRequestWindowFeature(int पर देखें)

तो यह किसी और चीज की तुलना में भ्रामक त्रुटि संदेश का मामला हो सकता है।


1
मेरे लिए भी काम किया। मैं समर्थन पुस्तकालय v21 से ActionBarActivity का उपयोग कर रहा हूं।
सायबरजेन

1
मैं उपयोग कर रहा हूं appCompatऔर इसलिए supportRequestWindowFeatureमेरे लिए यह चाल चली गई और मुझे इसे पहले नहीं रखना super.onCreate
पड़ा

यकीन है कि यह काम 5 साल पुराना है, लेकिन सिर्फ fyi: Window.FEATURE_INDETERMINATE_PROGRESS को एपी बनाम 24
एडम आर। टर्नर

7

कृपया जांचें कि आपकी कक्षा गतिविधि या एक्शनबेरिटी से विस्तारित है। यदि आप ActionBarActivity का उपयोग कर रहे हैं तो कृपया गतिविधि का उपयोग करें।


यह मेरा मुद्दा था! मैं AppCompatActivity और RequestWindowFeature (Window.FEATURE_NO_TITLE) का विस्तार कर रहा था, जब तक कि मैं एक्टिविटी को स्विच करने के लिए टाइटल बार को छिपाने में सफल नहीं हुआ।
केसी मरे 21

7

यदि आप अपनी गतिविधि का उपयोग डायलॉग (Theme.Dialog के साथ) के रूप में कर रहे हैं, तो सुनिश्चित करें कि आप ActionBarActivity (Android स्टूडियो विज़ार्ड के साथ आपको दिया गया डिफ़ॉल्ट) के बजाय गतिविधि का विस्तार करें। तब आप उपयोग कर सकते हैं

requestWindowFeature(Window.FEATURE_NO_TITLE);

या

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

के बाद super.onCreate()...


3

मैं भी एक अलग कार्यप्रवाह से इस त्रुटि में भाग गया। मैंने एक कस्टम डायलॉगग्रैगमेंट क्लास बनाया और मैंने दो @Overrideफ़ंक्शन बनाए - onCreateView और onCreateDialog । मेरे onCreateView फ़ंक्शन ने टुकड़े के लिए एक कस्टम लेआउट को पकड़ा, और मेरे onCreateDialog फ़ंक्शन ने एक AlertDialog.Builder बनाया।

यह काम नहीं करता दिखाई दिया क्योंकि onCreateDialog को onCreateView से पहले कहा जाता है। जब मैंने onCreateView को हटा दिया [अपने कस्टम दृश्य मुद्रास्फीति को onCreateDialog में स्थानांतरित करके, मैंने त्रुटि का सामना किया:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

मुझे एहसास हुआ कि मेरी कठिनाई दोनों ओवरराइड को लागू करने की कोशिश करने से आई थी क्योंकि मैं 1) डायलॉग के मुख्य दृश्य के लिए एक लेआउट का उपयोग करता था, और 2) बिल्डर पूर्व-परिभाषित पॉजिटिव / नेगेटिव बटन का उपयोग करता था। मेरा समाधान मेरे कस्टम संवाद दृश्य में सकारात्मक / नकारात्मक बटन बनाना था, इसलिए मैंने ओवरराइड onCreateDogog फ़ंक्शन के अपने कार्यान्वयन को हटा दिया।

आशा है कि यह भविष्य में किसी की मदद करता है!

यहाँ कुछ SO प्रश्न दिए गए हैं जिनसे मुझे मदद मिली:


1
यार तुमने मेरा दिन बचा लिया! धन्यवाद! :)
बसीम विस्सा

2

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowActionBar">false</item>

    </style>

केवल इस तरह से सेट की गई शैली को किसी भी कोडिंग पक्ष को बदलने की आवश्यकता नहीं है


1

मैं एक DialogFragment और उपरोक्त जवाब काम नहीं कर रहा था । मुझे शीर्षक हटाने के लिए getDialog () का उपयोग करना पड़ा:

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

1

के बजाय बढ़ाएँ ( गतिविधि ) ( ActionBarActivity )

उदाहरण: public class Itemdetails extends Activity {....

फिर ऑनक्रिट में लिखें:

super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.Your_Activity);

0

मुझे लगता है कि ऐसा करने का सबसे सरल तरीका नीचे दिए गए कोड का उपयोग करना है

  getActionBar().setTitle(null);

0

कृपया निम्न विकल्पों को आज़माएं, इनमें से कम से कम आपको काम करना चाहिए:

  1. यदि आप एक DialogFragment का उपयोग कर रहे हैं, तो दोनों तरीकों को ओवरराइड नहीं करने का प्रयास करें onCreateDialog(..)और onCreateView(..) (यह परिवर्तन मेरे लिए काम किया है)

  2. गतिविधि में supportRequestWindowFeature(Window.FEATURE_NO_TITLE)/requestWindowFeature(Window.FEATURE_NO_TITLE)पहले setContentView(..)और बाद में प्रयास करेंsuper.onCreate(..);

  3. पहले 2 विकल्प का प्रयास करें super.onCreate(..);


0

आपकी पंक्ति गलत है: super.onCreate (saveInstanceState);

इस शिष्टाचार का उपयोग करें:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_qrscanner);

0

मेरे पास यह त्रुटि थी AlertDialogऔर यह त्रुटि केवल एपीआई 19 में हो रही थीdialog.show() थी।

पता लगा कि android.app.AlertDialogआयात समस्या पैदा कर रहा है इसलिए मैंने इसे बदल दिया androidx.appcompat.app.AlertDialogऔर इसे ठीक कर दिया।

ध्यान दें कि यह काम करेगा अगर आप androidx का उपयोग कर रहे हैं। यदि आप नहीं हैं, तो आपको उस आयात के पुराने appcompat संस्करण का उपयोग करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.