8

मेरे पास संवाद खंड है। मेरे पास गतिविधि और संवाद में इस खंड का उपयोग करने का इरादा है। और मैं क्रिएटडिअलॉग और क्रिएटिव्यू विधि पर ओवरराइड करता हूं। यहाँ कोडिंग है।AndroidRuntimeException: requestFeature() को सामग्री जोड़ने से पहले कॉल किया जाना चाहिए

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.interval_time_popup, null); 
     setup(view, false); 
     return view; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     View view = getActivity().getLayoutInflater().inflate(R.layout.interval_time_popup, null); 

     builder.setTitle("Interval Time"); 
     builder.setView(view); 
     setup(view, true); 
     builder.setPositiveButton("Set", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       listener.setOnIntervalTime(hourNp.getValue(), minNp.getValue()); 
       dismiss(); 
      } 
     }); 
     builder.setNegativeButton("Cancel", new OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       dismiss(); 
      } 
     }); 
     return builder.create(); 
    } 

मैं इस तरह के गतिविधि वर्ग में इस खंड का उपयोग करता हूं।

  SelectTimeIntervalDialogFragment fragment = new SelectTimeIntervalDialogFragment(); 
      fragment.setHrMin(hr, min); 
      Bundle args = new Bundle(); 

      FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
      t.replace(R.id.shift_period_interval_layout, fragment); 
      t.commit(); 

मुझे लगता है कि जैसे किसी अन्य गतिविधि से यह कहते हैं।

  if((getResources().getConfiguration().screenLayout & 
          Configuration.SCREENLAYOUT_SIZE_NORMAL) == 
          Configuration.SCREENLAYOUT_SIZE_NORMAL){ 
         Intent intent = new Intent(ShiftPeriodActivity.this, SelectIntervalActivity.class); 
         intent.putExtra("intervalHr", speriod.intervalHr); 
         intent.putExtra("intervalMin", speriod.intervalMin); 
         startActivityForResult(intent, 1); 
        } else { 
         FragmentManager fm = getSupportFragmentManager(); 
         intervalDialog = new SelectTimeIntervalDialogFragment(); 
         intervalDialog.setHrMin(speriod.intervalHr, speriod.intervalMin); 
         intervalDialog.show(fm, "interval_fragment"); 
        } 

मेरे पास दो शर्तें हैं। जब स्क्रीन का आकार सामान्य होता है, तो यह गतिविधि को कॉल करता है जिसमें खंड संवाद शामिल होता है। अन्यथा, यह पॉपअप संवाद को कॉल करें। जब मैं पॉपअप संवाद को कॉल करता हूं तो मुझे अपवाद मिला। यह कहा requestFeature() must be called before adding content। क्या मैं इस तरह उपयोग कर सकता हूँ? मैं जानना चाहता हूं कि इसे कैसे दूर किया जाए।

धन्यवाद।

+0

आपको पहले अनुरोध कहा जाना चाहिए setcontentView() –

+0

से पहले आपकी समस्या हल हो गई है ?? – Subburaj

+2

संभावित रूप से 'सेटअप()' कॉल 'अनुरोध फ़ीचर() '- आप' onCreateView() 'और' onCreateDialog() 'दोनों में' सेटअप()' को कॉल करते हैं। (मुझे पता है, पुराना सवाल है लेकिन समीक्षा कतार में आया है।) – laalto

उत्तर

-3

मुझे लगता है कि आप requestWindowFeature() का उपयोग कर रहे हैं;

पर सेट करें इसे सेट करें CONTContentView (R.layout.activity) से पहले इसका उपयोग करें;

+0

जब मैं पॉपअप संवाद को कॉल करता हूं तो मुझे अपवाद मिला। – user1156041

15

ऐसा लगता है कि आपकी समस्या बिल्कुल मेरे समान है - समान-आश कोड और उसी अपवाद को फेंक दिया गया है।

समाधान यह है कि @laalto ने सुझाव दिया है: onCreateView() या onCreateDialog() का उपयोग करें, लेकिन दोनों एक ही समय में नहीं। मुझे पता है कि अपवाद कई अलग-अलग चीजों के कारण प्रतीत होता है लेकिन यह मेरे मामले में मदद करता है; उम्मीद है कि यह भविष्य में किसी और की मदद करेगा :)

+0

यदि आपको दोनों विधियों की आवश्यकता है तो क्या होगा? –

+0

मुझे यकीन नहीं है कि यह करने के लिए सही बात है: "कार्यान्वयन इस वर्ग को ओवरराइड करना चाहिए और संवाद की सामग्री की आपूर्ति के लिए क्रिएटिव्यू (लेआउट इन्फ्लेटर, व्यू ग्रुप, बंडल) पर लागू होना चाहिए। वैकल्पिक रूप से, वे क्रिएटडिअलॉग (बंडल) पर ओवरराइड कर सकते हैं। एक पूरी तरह से कस्टम संवाद बनाने के लिए, जैसे अलर्टडिअलॉग, अपनी सामग्री के साथ। " (से: http://developer.android.com/reference/android/app/DialogFragment.html)। – JakeP

+1

वही लिंक यह भी उल्लेख करता है: "एक संवाद के अंदर दृश्य पदानुक्रम उत्पन्न करने के लिए क्रिएटिव्यू (लेआउट इन्फ्लेटर, व्यू ग्रुप, बंडल) पर लागू करने के बजाय (या इसके अतिरिक्त), आप अपना खुद का कस्टम संवाद ऑब्जेक्ट बनाने के लिए क्रिएटडिअलॉग (बंडल) पर लागू कर सकते हैं। " लेकिन ऐसा करने से डरावना "AndroidRuntimeException: requestFeature() को सामग्री जोड़ने से पहले कॉल किया जाना चाहिए" तो या तो दस्तावेज़ या एपीआई त्रुटिपूर्ण है ... –

संबंधित मुद्दे

 संबंधित मुद्दे