व्यू स्वचालित रूप से जेनरेट की गई बंडल जानकारी का उपयोग नहीं कर रहा है।

स्टैक ओवरफ्लो की खोज से इसके बारे में कोई परिणाम नहीं निकला। दृश्य कस्टम नहीं है, अद्वितीय नाम आईडी है। का डुप्लिकेट नहीं है:

findViewById शामिल करने के लिए काम नहीं कर रहा है?

FindViewById () दृश्य नहीं ढूंढ रहा है

एंड्रॉइड: findviewbyid: आईडी द्वारा दृश्य ढूंढना जब दृश्य उसी लेआउट पर नहीं होता है जिसे setContentView द्वारा बुलाया जाता है

अन्य दृश्य अपेक्षानुसार काम कर रहे हैं। केवल एक जो नहीं है उसे शामिल के रूप में जोड़ा गया है, यही एकमात्र अंतर है जो मुझे मिल सकता है।

समस्या का विवरण: दृश्य छिपा हुआ है, गतिविधि फिर से बनाई गई है, दृश्य दिखाया गया है।

विवरण: मेरे पास एक बटन है, जो डिफ़ॉल्ट android:onClickविशेषता का उपयोग करता है, जो एक विधि का आह्वान करता है। यह तरीका उम्मीद के मुताबिक काम कर रहा है। फिर, मैं एंड्रॉइड डिवाइस को "फ्लिप" करता हूं, ओरिएंटेशन बदल जाता है, जिससे यह onSaveInstanceState(Bundle b) को कॉल करता है। गतिविधि के बारे में जानकारी को बंडल किया जाता है, गतिविधि को नष्ट कर दिया जाता है और फिर से बनाया जाता है, फिर सहेजे गए बंडल को अपेक्षित रूप से onCreate(Bundle b) पर भेज दिया जाता है।

फिर, Android गतिविधि के अनुसार, बंडल दृश्य (स्थितियों) को पुनर्स्थापित करता है।

एक दृश्य को छोड़कर

class ExampleActivity extends AppCompatActivity {
    public void hide(View view){
        view.setVisibility(View.GONE);
    }
}

गतिविधि एक्सएमएल

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/linear_layout_style"
    tools:context=".ExampleActivity">
        <View style="@style/another_style" />
        <include layout="@layout/included_xml" />
        <View style="@style/another_style" />
</LinearLayout>

एक्सएमएल शामिल है

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/linear_layout_style">

    <!-- This was supposed to stay hidden after pressed, but it restores in a VISIBLE state -->
    <Button
        style="@style/the_style"
        android:id="@+id/an_unique_id"
        android:onClick="hide"
        android:text="EXAMPLE: Hide" />

    <!-- This is supposed to always be visibile, and it does -->
    <Button
        style="@style/the_style"
        android:onClick="doOtherStuff"
        android:text="Example: Always Available">

        <requestFocus />
    </Button>
</LinearLayout>
0
Bonatti 7 नवम्बर 2018, 20:22

1 उत्तर

सबसे बढ़िया उत्तर

सहेजा गया उदाहरण सब कुछ नहीं बचाता है। मैंने TextView (Button के स्रोत को देखा और यह TextView से अधिक नहीं है) और यह दृश्यता को नहीं बचाता है। वास्तव में यह केवल एक चीज बचाता है जो टेक्स्ट और टेक्स्ट चयन है, लेकिन तभी जब आप उस पर setFreezesText(true) को कॉल करते हैं। उसी टोकन से, View.onSaveInstanceState() कुछ भी नहीं करता है (बस एक खाली सहेजी गई स्थिति लौटाता है)।

इसलिए, आपको उन्हें मैन्युअल रूप से सहेजने और उन्हें स्वयं पुनर्स्थापित करने की आवश्यकता है। यह एक ऐसा क्षेत्र है जहां मुझे लगता है कि एंड्रॉइड ने बहुत खराब काम किया है। डॉक्स कहते हैं:

डिफ़ॉल्ट कार्यान्वयन आपके लिए अधिकांश UI प्रति-आवृत्ति स्थिति का ख्याल रखता है, पदानुक्रम में प्रत्येक दृश्य पर View.onSaveInstanceState() को कॉल करके, और वर्तमान में केंद्रित दृश्य की आईडी को सहेजकर (जिनमें से सभी को पुनर्स्थापित किया जाता है) onRestoreInstanceState(Bundle) के डिफ़ॉल्ट कार्यान्वयन द्वारा)।

जो निश्चित रूप से मंच स्रोत को देखने के बाद भ्रामक लगता है। मेरा मतलब है, यहां नौगट से View.onSaveInstanceState() का कार्यान्वयन है:

protected Parcelable onSaveInstanceState() {
    mPrivateFlags |= PFLAG_SAVE_STATE_CALLED;
    if (mStartActivityRequestWho != null) {
        BaseSavedState state = new BaseSavedState(AbsSavedState.EMPTY_STATE);
        state.mStartActivityRequestWhoSaved = mStartActivityRequestWho;
        return state;
    }
    return BaseSavedState.EMPTY_STATE;
}

मैं इस बात से असहमत हूं कि यह काम का "सबसे अधिक ख्याल रखता है"।

1
Jeffrey Blattman 7 नवम्बर 2018, 18:58