2011-08-10 13 views
9

मेरे पास एंड्रॉइड वेबव्यू पर एक प्रश्न है।एंड्रॉइड वेबव्यू - यूआरएल रीडायरेक्शन पर वापस नेविगेट करना

मान लें यूआरएल एक यूआरएल बी पर रीडायरेक्ट

मेरी Android एप्लिकेशन जब यह यूआरएल एक को खोलने के लिए कोशिश करता है, वेब दृश्य स्वचालित रूप से एक यूआरएल कुछ अन्य यूआरएल के लिए पुनः निर्देशित किया जा रहा है यूआरएल बी

ले जाती है, मैं दोनों यूआरएल वेबव्यू इतिहास में संग्रहीत हैं देखें। अब मेरे वेबव्यू इतिहास में [,, यूआरएल ए, यूआरएल बी]

यूआरएल बी वेबपृष्ठ से पिछली कुंजी पर क्लिक करें, वेबव्यू यूआरएल ए लोड करने का प्रयास करेगा, जो फिर से यूआरएल बी पर रीडायरेक्ट करेगा। हमें दोबारा क्लिक करने की जरूरत है यूआरएल ए

से परे वापस जाने के लिए मैं इस समस्या को कैसे हल करूं? से पिछले 2 घंटे :(

+0

http://stackoverflow.com/questions/11992478/dead-loop-in-android-webview-backkey-for-redirect-href-link इससे मदद मिलेगी –

उत्तर

0

कोशिश संघर्ष OnBackPressed() ओवरलोड डिफ़ॉल्ट हार्ड की पीठ कार्रवाई overide करने के लिए। वहाँ यू वर्तमान गतिविधि समाप्त या नियंत्रित करने जैसे आप चाहें कर सकते हैं।

+0

आपको नहीं मिला। मैं कैसे जान सकता हूं कि यूआरएल एक रीडायरेक्ट यूआरएल है या एक नियमित यूआरएल है? साथ ही, क्या वेबव्यू इतिहास से कणिका यूआरएल को हटाना संभव है? – Kumar

4
private class HelloWebViewClient extends WebViewClient { 
} 

mWebView.setWebViewClient(new HelloWebViewClient()); 

हैं अधिभावी shouldOverrideUrlLoading(), तो रिटर्न फाल्स। सही तरीका नहीं हो सकता है, लेकिन यह मेरे लिए काम करता है।

+2

यह स्वीकार्य उत्तर होना चाहिए। IfververideUrlLoading() पर सही लौटने से पहले समस्या को ट्रिगर करता है, क्योंकि एपीआई देखता है कि एक स्पष्ट यूआरएल लोड के रूप में, जो बैक स्टैक में जोड़ा जाता है, को सामान्य रीडायरेक्ट के रूप में नहीं माना जाता है (जिसे बैक स्टैक में नहीं जोड़ा जाता है)। – tinsukE

+0

मैं मानता हूं कि यह स्वीकार्य उत्तर होना चाहिए। लौटने पर 'झूठा' अपेक्षित परिणाम उत्पन्न करता है। https://developer.android.com/reference/android/webkit/WebViewClient.html –

9

मैं भी एक ही समस्या है, और पता लगा कि यह कैसे हल करने के लिए। यह तुम्हारा की तरह है। जब मैं पहली बार लिंक पर क्लिक करें (www.new.a) यह स्वचालित रूप से अन्य लिंक रीडायरेक्ट करता है (mobile.n ew.a)। आम तौर पर लिंक दो या तीन को पुनर्निर्देशित करते हैं, और मेरा समाधान लगभग हर रीडायरेक्ट लिंक पर काम किया गया है। मुझे उम्मीद है कि यह उत्तर आपको लिंकिंग रीडायरेक्ट लिंक के साथ मदद करेगा।

मुझे अंत में यह पता चला। आपको चार एपीआई के साथ WebViewClient की आवश्यकता है। WebViewClient में OverrideUrlLoading(), onPageStarted(), onPageFinished(), और doUpdateVisitedHistory() पर चाहिए। आपको आवश्यक सभी एपीआई एपीआई 1 है इसलिए चिंता न करें।

यह इस तरह से चला जाता है। आपKeyUp() के बजाए अन्य फ़ंक्शन का उपयोग कर सकते हैं।

public class MyWebView extends WebView{ 
    ... 
    private int mRedirectedCount=0; 
    .... 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && this.canGoBack()) { 
      if(mRedirectedCount>0){ 
       while(mRedirectedCount>0){ 
        this.goBack(); 
        mRedirectedCount--; 
       } 
       mRedirectedCount=0; //clear 
      }else{ 
       this.goBack(); 
      } 
     return true; 
    } 

    private class MyWebViewClinet extends WebViewClient{ 
     boolean mIsPageFinished=true; 
     ...  

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      ..... 
      if(mIsPageFinished){ 
       mRedirectedCount=0; //clear count 
      } 
      ..... 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      mIsPageFinished = false; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      mIsPageFinished = true; 
     } 

     @Override 
     public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { 
      super.doUpdateVisitedHistory(view, url, isReload); 

      if(!mIsPageFinished){ 
       mRedirectedCount++; 
      } 
     } 
+0

मैं ऑनअप के बजाय OnBackPressed() का उपयोग करता हूं और यह काम नहीं करता है –

0

मैं समस्या भी है, अब पहले से ही समस्या हल हो।

solution

** WebViewClient प्रदान की जाती है, तो सच लौटने का मतलब है, जबकि झूठी वापसी का मतलब है वर्तमान WebView यूआरएल संभालती मेजबान आवेदन, यूआरएल को संभालती है। **

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