2013-06-07 7 views
6

मैं WebView सामग्री स्क्रॉल स्थिति के साथ एक समस्या का सामना करना पड़ रहा हूँ और यहाँ यह है: मैं पोर्ट्रेट मोड में कुछ हद तक पेज नीचे scolling कर रहा हूँ और जब मैं परिदृश्य के लिए ओरिएंटेशन बदलने स्क्रॉल ऊपर या नीचे चलता है। यह पोर्ट्रेट मोड में मौजूद सटीक सामग्री नहीं दिखाता है। मैंने मैनिफेस्ट फ़ाइल में configChanges="keyboardHidden|orientation|screenSize" के रूप में परिवर्तन करने की कोशिश की लेकिन कोई भाग्य नहीं। मैंने ओवरराइड किया लेकिन यह काम नहीं किया। मैंने इस question में स्वीकार्य उत्तर लागू किया लेकिन इसका कोई उपयोग नहीं किया गया। क्या कोई सुझाव दे सकता है कि क्या किया जाना चाहिए और यह क्यों काम नहीं करता? यह Google नेक्सस टैब के लिए है और न्यूनतम आवश्यक एसडीके संस्करण 14 है। धन्यवाद।उन्मुखीकरण परिवर्तन पर एक ही सामग्री (Android) के लिए WebView स्थिति बहाल

उत्तर

1

देखें कक्षाएं एक onSaveInstanceState() विधि है कि एक Parcelable देता है, और राज्य को बहाल करने के लिए एक onRestoreInstanceState(Parcelable state) विधि है। अगर मुझे सही याद है, तो सहेजे गए राज्य में स्क्रॉल स्थिति शामिल है। तुम सब करने की ज़रूरत है Parcelable बचाने आप अपने टुकड़ा के onSaveInstanceState विधि में WebView के onSaveInstanceState() के लिए एक कॉल से मिलता है:,

public void onSaveInstanceState(Bundle savedState) { 

    super.onSaveInstanceState(savedState); 

    WebView webView = (WebView) findViewById(...); 
    savedState.putParcelable("myKey", webView.onSaveInstanceState()); 

} 

फिर अपने onCreateView विधि में आपको लगता है कि राज्य को बहाल यदि उपलब्ध हो:

public View onCreateView (LayoutInflater inflater, 
    ViewGroup container, Bundle savedInstanceState) { 

    ... 

    if (savedInstanceState != null) { 
     WebView webView = (WebView) findViewById(...); 
     Parcelable savedState = savedInstanceState.getParcelable("myKey"); 
     if (savedState != null) { 
      webView.onRestoreInstanceState(savedState); 
     } 
    } 

    .... 

} 
+0

कृपया टॉम टैश के उत्तर की टिप्पणी पर नज़र डालें। – Lavanya

+0

आप तो टुकड़े का उपयोग नहीं कर रहे हैं नहीं, इस काम नहीं करेगा। यह आपके लिए एक बहुत बड़ी समस्या है, तो यह खर्च एक टुकड़ा आधारित संस्करण की कोशिश कर कुछ घंटों के लायक हो सकता है (क्या आप फिर भी गतिविधियों के अंदर टुकड़े करने के लिए आगे बढ़ जाना चाहिए, और समर्थन पुस्तकालय पश्च संगतता प्रदान करेगा)। – Phil

+0

मैं सिर्फ यह कोशिश की, लेकिन लाइन 'savedState.putParcelable (" MyKey ", webView.onSaveInstanceState());' मुझे त्रुटि 'onSaveInstanceState (देता है) android.view.View' – primehalo

0

पर SaveInstanceState का उपयोग करने के लिए स्क्रॉलव्यू और को पुनर्स्थापित करने के लिए RestoreInstanceState विधि में पुनर्स्थापित करने का प्रयास करें। यू एक्सएमएल thr scrollview इस्तेमाल किया है? यदि हाँ तो उस दृश्य का संदर्भ हो और जब गतिविधि बचाया state.Hope को scrollview की तो सेट स्थिति बहाल इस मदद करता है।

+0

में पहुँच संरक्षित है कृपया मेरी टिप्पणी को देखो जब अभिविन्यास बदले यह निर्मित हो does not को TomTasche – Lavanya

2

मुझे अपने ऐप के साथ एक ही समस्या का सामना करना याद है। अगर मुझे गलत नहीं लगता है, तो फिल द्वारा सुझाया गया समाधान काम नहीं करता है (एंड्रॉइड के कुछ संस्करणों पर?)।

मैं अब निम्नलिखित दृष्टिकोण का उपयोग कर रहा:, outState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());

  • onCreate में

    savedInstanceState से पिछले स्क्रॉल स्थान प्राप्त है और एक सेट:

    1. onSaveInstanceState में WebView की वर्तमान पुस्तक स्थिति को बचाने के कस्टम WebViewClient:

      setWebViewClient(new WebViewClient() { 
      
          @Override 
          public void onPageFinished(WebView view, String url) { 
           super.onPageFinished(view, url); 
      
           if (!scrolled) { 
            postDelayed(new Runnable() { 
      
             @Override 
             public void run() { 
              scrollBy(0, scroll); 
             } 
            }, 250); 
      
            scrolled = true; 
           } 
          } 
      }); 
      

    यह नरक के रूप में बदसूरत है, लेकिन यह थोड़े लिए काम करता है मैं (यह वर्तमान ज़ूम-स्तर, आदि के लिए खाता नहीं है)। उस कोड के बारे में बहुत कुछ है जो आप सुधार सकते हैं, लेकिन यह मूल रूप से चाल करता है।

  • +0

    मेरे गतिविधि का जवाब।मैं SaveInstanceState का उपयोग कैसे करूं, जिसे केवल तब कहा जाता है जब यह किसी अन्य ऐप पर ध्यान केंद्रित करता है। चूंकि मेरी गतिविधि को पुनर्निर्मित नहीं किया गया है, इसलिए मैं ऑनस्टोर इंस्टेंसस्टेट का उपयोग भी नहीं कर सकता। @TomTasche – Lavanya

    +0

    ओह, मैं देखता हूं। आप RestoreInstanceState के बजाय 'ऑन कॉन्फ़िगरेशन चेंज' का उपयोग कर सकते हैं, लेकिन मुझे नहीं पता कि आप SaveInstanceState पर क्या बदल सकते हैं। माफ़ कीजिये! – TomTasche

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