दिलचस्प पोस्ट
एंड्रॉइड मैप एपीआई वी 2 में मार्कर कैसे एनीमेट करें? बिना अक्षरों के वर्णों के यूनिकोड वर्णों की सूची प्रिंट करें क्या मेनिफेस्ट फ़ाइल में एक आंतरिक वर्ग के रूप में प्रसारण रिसीवर को परिभाषित करना संभव है? जावा में URL पैरामीटर प्राप्त करना और उस URL से एक विशिष्ट पाठ निकालने मैं MySQL में एकाधिक स्तंभों के लिए अद्वितीय बाधा कैसे निर्दिष्ट करूं? मैं किसी दृश्य को प्रोग्राम को एक आईडी कैसे प्रदान करूं? सामग्री ऊँचाई में पृष्ठ की ऊंचाई कैसे समायोजित करें? Sed में पर्यावरण चर प्रतिस्थापन एंड्रॉइड 6.0 मार्शमॉलो एसडी कार्ड पर लिख नहीं सकते टेस्टएनजी में परीक्षणों के निष्पादन का आदेश डीएसडी / एमएम / याय प्रारूप के साथ दिनांक देना शेल प्रक्रियाओं का समानांतर निष्पादन ReactJS आवेदन – लचीलाता वीएस तेजी से विफल एक्सएमएलपीआरएसपीएफ़ परियोजना की तैनाती के बाद एक्सपेशेशन varargs और ओवरलोडिंग के साथ बग?

ओरिएंटेशन परिवर्तन पर एंड्रॉइड टुकड़ा जीवनचक्र

टुकड़ों के उपयोग से 2.2 को लक्षित करने के लिए संगतता पैकेज का उपयोग करना।

किसी ऐप में टुकड़ों का उपयोग करने के लिए एक गतिविधि को पुनः लोड करने के बाद मैं ओरिएंटेशन परिवर्तन / राज्य प्रबंधन काम नहीं कर पाया, इसलिए मैंने एक सिंगल फ्रेग्मेंट एक्टिविटी और एक टुकड़ा के साथ एक छोटा परीक्षण ऐप बनाया है।

ओरिएंटेशन परिवर्तन के लॉग अजीब हैं, इनक्रेडिट दृश्य के लिए कई कॉल्स

मुझे स्पष्ट रूप से कुछ याद आ रहा है – जैसा कि एक टुकड़ा विचलन और एक नया उदाहरण बनाने की बजाय इसे फिर से जोड़ने की तरह है, लेकिन मुझे कोई दस्तावेज नहीं मिल सकता है जो यह संकेत करेगा कि मैं गलत कहां रहा हूं।

क्या मैं यहाँ गलत तरीके से कर रहा हूँ पर कुछ प्रकाश डाला सकता है कृपया धन्यवाद

अभिविन्यास परिवर्तन के बाद इस प्रकार लॉग है।

Initial creation 12-04 11:57:15.808: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:15.945: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:16.081: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null Orientation Change 1 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): onSaveInstanceState 12-04 11:57:39.031: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:39.167: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null Orientation Change 2 12-04 11:58:32.162: D/FragmentTest.FragmentOne(3143): onSaveInstanceState 12-04 11:58:32.162: D/FragmentTest.FragmentOne(3143): onSaveInstanceState 12-04 11:58:32.361: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null 12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null 12-04 11:58:32.498: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:58:32.498: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null 

मुख्य गतिविधि (टुकड़ा गतिविधि)

 public class FragmentTestActivity extends FragmentActivity { /** Called when the activity is first created. */ private static final String TAG = "FragmentTest.FragmentTestActivity"; FragmentManager mFragmentManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d(TAG, "onCreate"); mFragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); FragmentOne fragment = new FragmentOne(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); } 

और टुकड़ा

 public class FragmentOne extends Fragment { private static final String TAG = "FragmentTest.FragmentOne"; EditText mEditText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG, "OnCreateView"); View v = inflater.inflate(R.layout.fragmentonelayout, container, false); // Retrieve the text editor, and restore the last saved state if needed. mEditText = (EditText)v.findViewById(R.id.editText1); if (savedInstanceState != null) { Log.d(TAG, "OnCreateView->SavedInstanceState not null"); mEditText.setText(savedInstanceState.getCharSequence("text")); } else { Log.d(TAG,"OnCreateView->SavedInstanceState null"); } return v; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.d(TAG, "FragmentOne.onSaveInstanceState"); // Remember the current text, to restore if we later restart. outState.putCharSequence("text", mEditText.getText()); } 

प्रकट

 <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".activities.FragmentTestActivity" android:configChanges="orientation"> <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Solutions Collecting From Web of "ओरिएंटेशन परिवर्तन पर एंड्रॉइड टुकड़ा जीवनचक्र"

आप अपने टुकड़ों को दूसरे के ऊपर लेयर कर रहे हैं

जब एक कॉन्फ़िग परिवर्तन होता है तो पुराने टुकड़े को तब ही जोड़ा जाता है जब इसे पुन: निर्मित किया जाता है। यह पीछे के अधिकांश समय में भारी दर्द है

आप एक नया टुकड़ा बनाने के बजाय एक ही टुकड़ा का उपयोग करके त्रुटियों को रोक सकते हैं बस इस कोड को जोड़ें:

 if (savedInstanceState == null) { // only create fragment if activity is started for the first time mFragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); FragmentOne fragment = new FragmentOne(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); } else { // do nothing - fragment is recreated automatically } 

यद्यपि चेतावनी दीजिए: यदि आप फ़्रीग्मेंट के अंदर से गतिविधि दृश्यों का प्रयास करते हैं और पहुंचते हैं तो समस्याएं घटित होंगी क्योंकि जीवनशैली कम ही बदल जाएगी। (फ्रेगमेंट से अभिभावकीय गतिविधि से दृश्य प्राप्त करना आसान नहीं है)।

इस पुस्तक को उद्धृत करने के लिए, "एक सुसंगत उपयोगकर्ता अनुभव सुनिश्चित करने के लिए, एंड्रॉइड फ्रैग्मेंट लेआउट और एक संबद्ध स्टांप के साथ एक स्टोरी रिबूट किया जाता है, जब कोई गतिविधि पुनरारंभ हो जाती है।" (पृष्ठ 124)

और जिस तरह से संपर्क करने का तरीका पहले देखना है कि क्या टुकड़ा वापस ढेर पहले से ही आ गया है, और नया टुकड़ा उदाहरण केवल तभी बनाए जब यह नहीं है:

 @Override public void onCreate(Bundle savedInstanceState) { ... FragmentOne fragment = (FragmentOne) mFragmentManager.findFragmentById(R.id.fragment_container); if (fragment == null) { FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); fragmentTransaction.add(R.id.fragment_container, new FragmentOne()); fragmentTransaction.commit(); } } 

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

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState==null) { //do your stuff } } 

टुकड़ों को और अपरिवर्तित होना चाहिए।

आप onSaveInstanceState() का उपयोग करते हुए फ्रैग्मेंट onSaveInstanceState() कर सकते हैं विधि में super.onSaveInstanceState() को कॉल न करें।

हमें निरर्थक अपवाद को रोकने की हमेशा कोशिश करनी चाहिए, इसलिए बंडल की जानकारी के लिए हमें पहले से बचाने की विधि में पहले से जांचना होगा। इस ब्लॉग लिंक को देखने के लिए संक्षिप्त व्याख्या के लिए

 public static class DetailsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { // If the screen is now in landscape mode, we can show the // dialog in-line with the list so we don't need this activity. finish(); return; } if (savedInstanceState == null) { // During initial setup, plug in the details fragment. DetailsFragment details = new DetailsFragment(); details.setArguments(getIntent().getExtras()); getFragmentManager().beginTransaction().add(android.R.id.content, details).commit(); } } } 

यदि आप केवल एक प्रोजेक्ट करते हैं, तो प्रोजेक्ट मैनेजर का कहना है कि आपको स्विचिंग फ़ंक्शन स्क्रीन प्राप्त करने की आवश्यकता है, लेकिन आप स्विचिंग लेआउट को अलग-अलग लेआउट स्क्रीन नहीं करना चाहते हैं (लेआउट और लेआउट-पोर्ट सिस्टम बना सकते हैं।

गतिविधि या खंड को पुन: प्रारंभ करने की आवश्यकता के कारण, आप स्वचालित रूप से स्क्रीन स्थिति निर्धारित करेंगे, इसी लेआउट को लोड करेंगे), उपयोगकर्ता अनुभव अच्छा नहीं है, स्क्रीन स्विच पर सीधे नहीं, मैं इसका उल्लेख करता हूं? यूआरएल = YgNfP-vHy-Nuldi7YHTfNet3AtLdN-w__O3z1wLOnzr3wDjYo7X7PYdNyhw8R24ZE22xiKnydni7R0r35s2fOLcHOiLGYT9Qh_fjqtytJki और wd = & eqid = f258719e0001f24000000004585a1082

आधार यह है कि layout_weight के लेआउट के तरीके के वजन का उपयोग करके आपका लेआउट निम्नानुसार है:

 <LinearLayout Android:id= "@+id/toplayout" Android:layout_width= "match_parent" Android:layout_height= "match_parent" Android:layout_weight= "2" Android:orientation= "horizontal" > 

तो मेरा दृष्टिकोण है, जब स्क्रीन स्विचिंग, दृश्य फ़ाइल का एक नया लेआउट लोड करने की आवश्यकता नहीं है, पर लेआउट को संशोधित करेंसंचार करें गतिशील भार, निम्न चरणों: 1 पहले सेट: गतिविधि विशेषता में AndroidManifest.xml: एंड्रॉइड: configChanges = "कीबोर्डहाइड | ओरिएंटेशन + स्क्रीन साइज़" स्क्रीन स्विचिंग को रोकने के लिए, पुनः लोडिंग से बचें, ताकि ऑन-कॉन्फ़िगरेशन में दो बार फिर से लिखना गतिविधि या ऑन-कॉन्फ़िग्निशन बदलकर विधि में खंड का निरीक्षण किया जा सके।

 @Override Public void onConfigurationChanged (Configuration newConfig) { Super.onConfigurationChanged (newConfig); SetContentView (R.layout.activity_main); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { //On the layout / / weight adjustment LinearLayout toplayout = (LinearLayout) findViewById (R.id.toplayout); LinearLayout.LayoutParams LP = new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 2.0f); Toplayout.setLayoutParams (LP); LinearLayout tradespace_layout = (LinearLayout) findViewById(R.id.tradespace_layout); LinearLayout.LayoutParams LP3 = new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 2.8f); Tradespace_layout.setLayoutParams (LP3); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { //On the layout / / weight adjustment LinearLayout toplayout = (LinearLayout) findViewById (R.id.toplayout); LinearLayout.LayoutParams LP = new LayoutParams (LinearLayout.LayoutParams.MATCH_PARENT, 0, 2.8f); Toplayout.setLayoutParams (LP); LinearLayout tradespace_layout = (LinearLayout) findViewById (R.id.tradespace_layout); LinearLayout.LayoutParams LP3 = new LayoutParams (LinearLayout.LayoutParams.MATCH_PARENT, 0, 2.0f); Tradespace_layout.setLayoutParams (LP3); } } 

कॉन्फ़िगरेशन परिवर्तन पर, फ्रेमवर्क आपके लिए टुकड़े का एक नया उदाहरण बनाएगा और यह गतिविधि में जोड़ देगा। इसलिए इसके बजाय:

 FragmentOne fragment = new FragmentOne(); fragmentTransaction.add(R.id.fragment_container, fragment); 

यह करो:

 if (mFragmentManager.findFragmentByTag(FRAG1_TAG) == null) { FragmentOne fragment = new FragmentOne(); fragmentTransaction.add(R.id.fragment_container, fragment, FRAG1_TAG); } 

कृपया ध्यान दें कि फ्रेमवर्क अभिविन्यास परिवर्तन पर एक नया उदाहरण जोड़ता है जब तक आप सेट रीसेन इन्स्टेंस (सच्चे) नहीं कहते हैं, तो उस स्थिति में यह फ्रैगमेंटऑन का पुराना उदाहरण जोड़ देगा