2012-01-16 15 views
8

मैं एंड्रॉइड के लिए एक फोन डायलर ऐप लिख रहा हूं। मैंने कीपैड के लिए एक लेआउट बनाया, जिसमें टेक्स्ट व्यू और 10 बटन शामिल हैं। बटन 10 अंकों (0 से 9) के लिए कुंजी के रूप में हैं और टेक्स्टव्यू दबाए गए कुंजी के अनुसार संख्या प्रदर्शित करने के लिए है।डिवाइस दृश्य घुमाए जाने पर टेक्स्टव्यू का टेक्स्ट गायब हो रहा है

मेरे ऐप में, मैं पाठ ("0" या "1", आदि) को प्रत्येक बटन दबाए गए टेक्स्टव्यू में जोड़ रहा हूं। अगर मैंने बटन 1, 2, 3 दबाया तो टेक्स्टव्यू पर टेक्स्ट 123 है। समस्या है, चलो स्क्रीन लेआउट मोड में हैं और टेक्स्ट व्यू में 123 है, अगर मैं इसे चालू करता हूं, तो पोर्ट्रेट मोड में टेक्स्ट व्यू पर कोई टेक्स्ट नहीं है।

कृपया इसके बारे में मेरी सहायता करें।

+0

चेक यह एक http एक मदद से: // stackoverflow।कॉम/प्रश्न/3542333/कैसे-से-रोक-कस्टम-विचार-से-हार-राज्य-पार-स्क्रीन-अभिविन्यास-परिवर्तन/3542895 # 3542895 – om252345

+1

क्या आपके टेक्स्ट व्यू में आईडी है? क्या आप टुकड़ों का उपयोग करते हैं? – ania

+0

आईडी वहां है लेकिन मैं टुकड़ों का उपयोग नहीं कर रहा हूं। –

उत्तर

5

उन्मुखीकरण परिवर्तन पर जांच करें, पर विधि बनाने कहा जाता है, जो सभी विचारों की आवश्यकता है फिर से बनाया जाना है, तो आप निम्न विधियों का उपयोग करने की आवश्यकता:

  1. उपयोग onSavedInstance विधि और राज्यों को बचाने बंडल के लिए घटकों/विचारों का।
  2. गतिविधि टैग एंड्रॉइड में अपनी मेनिफेस्ट फ़ाइल में केवल ध्वज के बाद निम्नलिखित ध्वज का उपयोग करें: configChanges = "keyboardHidden | ओरिएंटेशन"। नीचे की तरह:

    <activity android:name=".SampleActivity" android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation"> 
        ... 
    </activity> 
    
7

इस का कारण यह कारण Android मूल रूप से गतिविधि को नष्ट करने और इसे फिर से हर बार जब आप डिवाइस बारी बारी से बनाने के लिए है। यह मुख्य रूप से पोर्ट्रेट/लैंडस्केप मोड के आधार पर विभिन्न लेआउट की अनुमति देने के लिए है।

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

यद्यपि आप configChanges संपत्ति को "अभिविन्यास" जोड़ सकते हैं, अपने आप को बदलना ध्यान रखें कि आप मूल रूप से एंड्रॉयड कि आप उन्मुखीकरण से संबंधित सब कुछ से निपटने के लिए जा रहे हैं कह रहे हैं में रखना - लेआउट बदलने सहित, आदि

13

क्या @jeet ने मेरे लिए काम नहीं किया है। मुझे "स्क्रीनसाइज" जोड़ना पड़ा।

<activity 
android:name=".YourActivity" 
android:label="@string/app_name" 
android:configChanges="keyboardHidden|orientation|screenSize" 
android:theme="@style/AppTheme.NoActionBar"> 
+0

'स्क्रीनसाइज' जोड़ना चाल था! कई घंटों तक समस्या को डीबग किया और अंततः एक समाधान है। – TranslucentCloud

+0

बहुत अच्छा काम करता है ... –

0

अगर किसी को अभी भी चल रहा है मुसीबतों:

android:configChanges="keyboardHidden|orientation|screenSize" 

इस प्रकार, पूरा नोड कुछ ऐसा दिखाई देगा: यह पंक्ति आपको आपकी गतिविधि का <activity> नोड में आपकी Manifest.xml में जोड़ना चाहिए है ... यह मेरे

public class BranjeKP extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_branje_kp); 

    //... 
} 

@Override 
protected void onSaveInstanceState(Bundle out) { 
    super.onSaveInstanceState(out); 
    out.putString("TVNazivPod", TVNazivPodatka.getText().toString()); 
    out.putString("TVEnotaMere", TVEnotaMere.getText().toString()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle in) { 
    super.onRestoreInstanceState(in); 
    TVNazivPodatka.setText(in.getString("TVNazivPod")); 
    TVEnotaMere.setText(in.getString("TVEnotaMere")); 
} 

आप मूल रूप से किसी भी मान आप चाहते हैं रोटेशन से पहले (यह है कि जब onSaveInstanceState कहा जाता है) एक बंडल में और रोटेशन के बाद बचाने (onRestor के लिए चाल किया eInstanceState) आप बस बंडल से सभी मूल्यों को खींचें। बस स्पष्ट करने के लिए, TVNazivPodatka और TVEnotaMere TextView विजेट हैं।

... से How to prevent custom views from losing state across screen orientation changes

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