2012-06-07 14 views
5

वैसे मूल रूप से, मैं एक बटन दबाता हूं, यह कैमरे के इरादे का उपयोग कर अपना डिफ़ॉल्ट कैमरा ऐप खोलता है। एक तस्वीर लेने के बाद, यह आवश्यक चीजों को बचाएगा और दूसरी गतिविधि पर रीडायरेक्ट करेगा।एंड्रॉइड गतिविधि-चित्र लेने के बाद रीसेट (अभिविन्यास?)

इस गतिविधि में, मेरे पास एक AsyncTask है जो सफलतापूर्वक चित्र अपलोड कर सकता है। तो मेरी समस्या क्या है आप पूछ सकते हैं। मेरी समस्या यह है कि यह मेरी गतिविधि को फिर से बनाता है और इसलिए इसके साथ मेरी प्रोग्रेसडिअलॉग को रीसेट कर देता है। (यह गतिविधि चलाता है, ASyncTask करता है, इसे खत्म करने से पहले मर जाता है और एक बार फिर एसिन्टास्क करने के लिए मेरी गतिविधि को फिर से बनाता है।)

यह हमेशा ऐसा नहीं करता है। मुझे लगता है कि ऐसा इसलिए होता है क्योंकि यह फोन से लैंडस्केप से पोर्ट्रेट तक ओरिएंटेशन बदलता है। (मैं एक सैमसंग है जब मैं कैमरा यह परिदृश्य को बदल देता है और जब मैं इसे खत्म, यह चित्र को वापस चला जाता में जाते हैं।।)

मैं पहले से ही अपना होमवर्क किया है और मेरी प्रकट करने के लिए इन बातों को जोड़ दिया है:

android:configChanges="orientation|keyboardHidden" 
android:screenOrientation="portrait" > 

मैंने अपने ऐप को पोर्ट्रेट अभिविन्यास में "लॉक" करना सुनिश्चित कर लिया है, लेकिन मुझे अभी भी मेरा ऐप परिवर्तन अभिविन्यास दिखाई देता है और मेरा मानना ​​है कि यही कारण है कि मेरी गतिविधि फिर से बनाई गई है।

मैं सभी प्रकार के चेक जोड़ने की योजना बना रहा था लेकिन मेरा मानना ​​है कि यह इस स्थिति को संभालने का सही तरीका नहीं है, क्योंकि कभी-कभी यह गतिविधि फिर से नहीं बनाता है।

protected void onSaveInstanceState(Bundle outState) { 
    outState.putString("started", "1"); 
} 

वैसे भी, किसी ने मुझसे मदद कर सकते हैं:

जांच के बारे में मैं बात कर रहा हूँ का उपयोग है? मैं बस इसे बिना किसी विनाश के गतिविधि को लोड करना चाहता हूं।

पीएस: वीएम में कोई समस्या नहीं है। वीएम गतिविधि को लोड करता है और इसे फिर से बनाये बिना इसे खत्म करता है।

पीपीएस: मेरे सैमसंग पर अतिरिक्त परीक्षण किया गया, अगर मैं इसे लैंडस्केप-मोड पर रखता हूं तो यह काम करेगा। तो यह निश्चित रूप से कैमरा है जो मेरी गतिविधि को इसके अभिविन्यास परिवर्तन के साथ नष्ट कर रहा है।

+0

एक ही समस्या के रूप में अच्छी तरह से मेरे लिए क्या हो रहा .. आप समाधान नहीं मिला है .. यदि ऐसा है तो कृपया पोस्ट यह .. वास्तव में उपयोगी होगा – GoCrazy

+0

क्या आपके पास लैंडस्केप के लिए डिज़ाइन किया गया एक लेआउट है? लेआउट-भूमि? – Ramz

+0

हैलो आपको कोई समाधान मिला :( –

उत्तर

0

प्रदर्शित करने और प्रगति

संवाद टुकड़ा गतिविधि में अद्यतन करने के लिए सुनिश्चित करें संभालने के लिए और स्थापित करने के लिए एक टुकड़ा गतिविधि बनाने का प्रयास करें "setRetainInstance (सही)," इससे यह सुनिश्चित हो जाएगा कि जब मुख्य गतिविधि बनाई जाती है/नष्ट हो जाती है तो यह नष्ट नहीं होता है।

शायद यह विचित्रता सहित इस खंड के अंदर पूरी छवि कैप्चर प्रक्रिया को रखना एक अच्छा विचार है। सुनिश्चित करें कि आप AsyncTask में doInBackground() के भीतर से मूल गतिविधि के संदर्भ का संदर्भ नहीं देते हैं। यदि आप ऐसा करते हैं और अभिविन्यास बदलता है (यानी गतिविधि नष्ट हो जाती है) तो यह एक त्रुटि फेंक देगा।

public class MyFragment extends FragmentActivity { 

    private ProgressBar mProgressBar; 
    private boolean mAsyncTaskActive = false; 


    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setRetainInstance(true); 

     // grab reference to progress bar 
     mProgressBar = (ProgressBar) getActivity().findViewById(R.id.my_progress_bar); 


     // check to see if the async task is active and set the progress bar visibility accordingly 
     if (mAsyncTaskActive) { 
      mProgressBar.setVisibility(View.VISIBLE); 
      mProgressBarText.setVisibility(View.VISIBLE); 
     } 


    } 

    // this method is called from your main activity when the user does something (i.e. clicks a button) 
    // make sure you have already instantiated the fragment 

    public void startSomething() { 
     if (mAsyncTaskActive == false) { 
      mProgressBar.setVisibility(View.VISIBLE); 
      new MyAsyncTask().execute(); 
      mAsyncTaskActive = true; 
     } 
    } 

    private class MyAsyncTask extends AsyncTask<Void, Void, Void> { 
     Context applicationContext; 



     @Override 
     protected Void doInBackground(String... params) { 
      // do stuff 
      publishProgress(//some number); 
      return null; 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
     setProgressPercent(progress[0]); 
     } 



} 

तुम भी अगर आप पहले से परिचित नहीं हैं, कैसे टुकड़े को लागू करने पर एक नज़र रखना चाहिए:

यहाँ एक मोटा उदाहरण है। एंड्रॉइड देव ब्लॉग के डायलॉगफ्रेगमेंट्स, एक ही प्रिंसिपल पर एक अच्छी पोस्ट है।http://android-developers.blogspot.com/2012/05/using-dialogfragments.html

+0

@Yihka क्या यह आपके प्रश्न का उत्तर देता है? – Aaron

8

मुझे एक ही समस्या थी, यह पता चला है कि आपको एपीआई स्तर 13 या उच्चतर में स्क्रीन आकार परिवर्तनों को सुनने की भी आवश्यकता है जैसा कि यहां बताया गया है; https://stackoverflow.com/a/11483806

android:configChanges="orientation|screenSize" 
1

इसके लिए ठीक करने के लिए, मैं अपने मैनिफ़ेस्ट फ़ाइल में निम्नलिखित का इस्तेमाल किया था:

android:screenOrientation="portrait"  
android:launchMode="singleTop"  
android:configChanges="keyboardHidden|orientation|screenSize" 
संबंधित मुद्दे