2013-04-22 13 views
5

में बैक बटन सक्षम करें मैं अभी एंड्रॉइड एसडीके के साथ शुरू कर रहा हूं। मैं WebView के साथ एक साधारण ऐप बनाना चाहता था जो केवल स्थानीय वेब-पेज प्रदर्शित करता है। मैंने इसे उदाहरण बनाने के लिए नेट पर पाए गए उदाहरणों का उपयोग किया है।वेबव्यू

ऐप बहुत अच्छा काम करता है, जब तक कि मैं बैक-बटन जोड़ना नहीं चाहता। जब फोन बैक-बटन दबाया जाता है तो ऐप क्रैश हो जाता है।

यहाँ यहाँ मेरी MainActivity.java

package com.hspd.avhor; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class MainActivity extends Activity { 

    WebView wv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     WebView wv = (WebView)findViewById(R.id.hspd_webview); 
     wv.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url){ 
       view.loadUrl(url); 
       return true; 
      } 
     }); 
     wv.loadUrl("file:///android_asset/one.htm"); 
    } 

    @Override 
    public void onBackPressed() 
    { 
     if(wv.canGoBack()) 
      wv.goBack(); 
     else 
      super.onBackPressed(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

है और मेरे activity_main.xml है:

04-22 17:48:06.953: W/dalvikvm(799): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
04-22 17:48:06.972: E/AndroidRuntime(799): FATAL EXCEPTION: main 
04-22 17:48:06.972: E/AndroidRuntime(799): java.lang.NullPointerException 
04-22 17:48:06.972: E/AndroidRuntime(799): at com.hspd.avhor.MainActivity.onKeyDown(MainActivity.java:41) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.view.KeyEvent.dispatch(KeyEvent.java:2609) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.app.Activity.dispatchKeyEvent(Activity.java:2375) 
04-22 17:48:06.972: E/AndroidRuntime(799): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1847) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3701) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2818) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.os.Looper.loop(Looper.java:137) 
04-22 17:48:06.972: E/AndroidRuntime(799): at android.app.ActivityThread.main(ActivityThread.java:5041) 
04-22 17:48:06.972: E/AndroidRuntime(799): at java.lang.reflect.Method.invokeNative(Native Method) 
04-22 17:48:06.972: E/AndroidRuntime(799): at java.lang.reflect.Method.invoke(Method.java:511) 
04-22 17:48:06.972: E/AndroidRuntime(799): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
04-22 17:48:06.972: E/AndroidRuntime(799): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
04-22 17:48:06.972: E/AndroidRuntime(799): at dalvik.system.NativeStart.main(Native Method) 
:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <WebView 
     android:id="@+id/hspd_webview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</ScrollView> 

यहाँ logcat में मेरी त्रुटियाँ हैं

अग्रिम :)

+0

पोस्ट अपने logcat त्रुटि कृपया – wangyif2

+1

एक सुझाव super.onBackPressed(); OnBackPressed() में पहला कथन होना चाहिए। किसी अन्य भाग में आप फिनिश() – Raghunandan

+0

पर कॉल करके केवल गतिविधि को समाप्त कर सकते हैं [संभावित पृष्ठ पर वापस जाने के लिए यदि पिछले पृष्ठ पर वापस जाएं तो वेबव्यू में बैक बटन दबाया गया है?] (https://stackoverflow.com/q/6077141/6521116) –

उत्तर

13

अवहेलना OnKeyDown (पैरामीटर) धन्यवाद, कुंजी दबाने वापस बटन है अगर, अगर वेबव्यू यदि ऐसा है तो पिछले पृष्ठ पर naviagate पिछले पृष्ठ पर नेविगेट कर सकते हैं की जाँच की जाँच करें। अगर वहाँ प्रदर्शित करने के लिए आप actiivty समाप्त कर सकते हैं कोई वेब पेज है

आप नीचे दिए गए

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
      //if Back key pressed and webview can navigate to previous page 
     webView.goBack(); 
      // go back to previous page 
     return true; 
    } 
    else 
    { 
     finish(); 
      // finish the activity 
    } 
    return super.onKeyDown(keyCode, event); 
} 

संपादन का उपयोग कर सकते हैं:

XML लेआउट में scrollview निकालें। नीचे

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<WebView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/wv"></WebView> 
</LinearLayout> 

संपादित करें का प्रयास करें: 2

यहां एक नमूना है कि काम करता है। सैमसंग गैलेक्सी S3

activtiy_main.xml पर परीक्षण किया गया

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<WebView 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_centerHorizontal="true" 
android:layout_centerVertical="true" 
android:id="@+id/wv"/> 

</RelativeLayout> 

MainActivity

public class MainActivity extends Activity { 
private WebView webView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


     setContentView(R.layout.activity_main); 
     webView = (WebView) findViewById(R.id.wv); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setWebChromeClient(new WebChromeClient() { 
       public void onProgressChanged(WebView view, int progress) { 
       MainActivity.this.setProgress(progress * 1000); 
       } 
      }); 
      webView.setWebViewClient(new WebViewClient() { 
       public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(MainActivity.this, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
       } 
      }); 

      webView.loadUrl("http://slashdot.org/"); 

} 



@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
     webView.goBack(); 
     return true; 
    } 
    else 
    { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
} 
+0

तेजी से उत्तर के लिए धन्यवाद। मैंने कोड बदल दिया, लेकिन मुझे अभी भी "दुर्भाग्य से, बंद कर दिया गया है।" त्रुटि। Logcat दो त्रुटियों प्रदर्शित करता है: com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) पर और dalvik.system.NativeStart.main (मूल निवासी विधि) –

+0

पर एक्सएमएल में scrollview को हटा दें। वेबव्यू खुद को स्क्रॉल कर सकता है – Raghunandan

+0

इसे हटा दिया और इसे रिलेवेटिवआउट के साथ बदल दिया। मेरी आखिरी टिप्पणी गलत थी, लॉगकैट पूरी तरह से त्रुटियों को प्रदर्शित करता है। मैं उनके साथ quoestion अद्यतन क्योंकि वहाँ टिप्पणी में कोई कमरा नहीं है .. –