2012-09-10 12 views
7

मेरे पास एक लेआउट है जिसमें एक संपादन टेक्स्ट और बटन है। मैं अपने मुख्य लेआउट में <include>लेआउट स्क्रीन रोटेशन पर खुद को डुप्लिकेट करना

मुझे लेआउट और रोटेशन के साथ एक अजीब समस्या है। यह डिवाइस को डुप्लिकेट करता है जब डिवाइस (भौतिक) घुमाया जाता है, पाठ और लेआउट को गड़बड़ कर देता है।

यहाँ यह पहले खुले पर है, मैं कुछ अतिरिक्त मिथ्या अर्थ लेना जोड़ने के बाद: टुकड़ा के शुभारंभ पर EditText में

1

DSC_0013 है।

फिर, मैं फोन बारी बारी से और कुछ अलग मिथ्या अर्थ लेना जोड़ें:

2

और आप इस मुद्दे को बहुत स्पष्ट रूप से देख सकते हैं। सबसे पहले, मैंने सोचा कि यह सिर्फ संपादन टेक्स्ट मैसेजिंग था। लेकिन अगर मैं एक नई लाइन बनाने के लिए पर्याप्त पाठ जोड़ने:

3

मैं देख सकता हूँ कि बटन भी में गड़बड़ हो जाता है।

मैं onSaveInstanceState ओवरराइड करता हूं, लेकिन इसमें मैं एडिटटेक्स्ट या उसके मान को स्पर्श नहीं करता हूं, यह किसी और चीज़ के लिए सख्ती से उपयोग किया जाता है।

क्या हो रहा है और मैं इसे कैसे ठीक कर सकता हूं?

+0

आप दृश्य कैसे सेट करते हैं? 'setContentView' + एक्सएमएल? विशेष रूप से 'addView'? – Eric

उत्तर

13

इसे फिक्स्ड!

बाहर निकलता है यह दृश्य डुप्लिकेटिंग, या एडिटटेक्स्ट, या बटन नहीं था। यह पूरा टुकड़ा था।

में मेरी गतिविधि के onCreate, मैं एक XML लेआउट करने के लिए टुकड़ा जोड़ें:

private FileDetails fileDetailsFragment; 

public void onCreate(Bundle savedInstanceState) { 
     ... 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager 
       .beginTransaction(); 
     fileDetailsFragment = new FileDetails(fileData); 
     fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment); 
     fragmentTransaction.commit(); 

और onCreate हर बार जब मैं फोन घुमाया बुलाया जा रहा था (के रूप में यह करने के लिए होती है)। तो मैंने यह देखने के लिए एक चेक डाला कि क्या गतिविधि पहली बार चल रही है, और यह बहुत अच्छा काम करता है।

private FileDetails fileDetailsFragment; 

public void onCreate(Bundle savedInstanceState) { 
    ... 
    if (savedInstanceState == null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager 
       .beginTransaction(); 
     fileDetailsFragment = new FileDetails(fileData); 
     fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment); 
     fragmentTransaction.commit(); 
    } else { 
     fileDetailsFragment = (FileDetails) getSupportFragmentManager().findFragmentById(R.id.DetailsHolder); 
    } 
+4

एक साल बाद और इस समाधान ने मेरी मदद की :) :) इसे पोस्ट करने के लिए बहुत बहुत धन्यवाद! –

+0

अब तीन वर्षों से अधिक ^^ – 8m47x

+0

अभी भी बहुत उपयोगी उत्तर – user1111527

1

तुम भी setRetainedInstance (सही) अपने टुकड़ा पर है, तो टुकड़ा प्रपत्र डी FragmentManager.findFragmentById (पूर्णांक) या FragmentManager.findFragmentByTag (स्ट्रिंग) प्राप्त करने की कोशिश कर सकते हैं, और अगर यह अशक्त रिटर्न यह मतलब आप करना पड़ा अपने टुकड़े का एक नया उदाहरण बनाएँ।

private FileDetails fileDetailsFragment; 


public void onCreate(Bundle savedInstanceState) { 
... 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fileDetailsFragment = (FileDetails) getSupportFragmentManager().findFragmentById(R.id.DetailsHolder); 
    if (fileDetailsFragment == null) { 
     fileDetailsFragment = new FileDetails(FileData); 
    } 

    FragmentTransaction fragmentTransaction = fragmentManager 
      .beginTransaction(); 

    fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment); 
    fragmentTransaction.commit(); 
}