Issue
My android application has a clickable welcome page which leads to a webview with multiple icons. when i click on icon it opens a HTML file which is stored in the assets folder. Similarly, clicking on other icons leads to opening of HTML resources in same webview instance. my problem is that if lets suppose i am on third level of navigation and i press android device back button, i get back to welcome page (first level navigation). How can i get to second level of navigation where my all pages icons are present, if i press back button in third level of navigation. My code for second level navigation is as below:
public class Home extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
WebView webview = (WebView) findViewById(R.id.webView1);
webview.loadUrl("file:///android_asset/webpages/index.html");
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
webview.getSettings().setJavaScriptEnabled(true);
}
}
index.html contains icons for navigating to different pages like contact.html, feedback.html if let suppose i am in contact.html and i press back button on android i should reach to index.html rather than first screen of my application.
@Zyber i am new to java and android development. i tried your suggestion, but when i press back button, i get force closed error.my code is as below :
public class Home extends Activity {
private WebView webview;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
WebView webview = (WebView) findViewById(R.id.webView1);
webview.loadUrl("file:///android_asset/webpages/index.html");
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
webview.getSettings().setJavaScriptEnabled(true);
}
}
my logcat code is as below:
0-02 19:01:07.536: E/AndroidRuntime(4160): FATAL EXCEPTION: main
10-02 19:01:07.536: E/AndroidRuntime(4160): java.lang.NullPointerException
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.summit.mpidc.Home.onKeyDown(Home.java:21)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.KeyEvent.dispatch(KeyEvent.java:2553)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.app.Activity.dispatchKeyEvent(Activity.java:2329)
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1825)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3340)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.ViewRootImpl.handleFinishedEvent(ViewRootImpl.java:3313)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2473)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.os.Looper.loop(Looper.java:137)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.app.ActivityThread.main(ActivityThread.java:4424)
10-02 19:01:07.536: E/AndroidRuntime(4160): at java.lang.reflect.Method.invokeNative(Native Method)
10-02 19:01:07.536: E/AndroidRuntime(4160): at java.lang.reflect.Method.invoke(Method.java:511)
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
10-02 19:01:07.536: E/AndroidRuntime(4160): at dalvik.system.NativeStart.main(Native Method)
EDITED code:
public class Home extends Activity {
private WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
WebView webview = (WebView) findViewById(R.id.webView1);
// WebView webview = new WebView(this);
// setContentView(webview);
webview.loadUrl("file:///android_asset/webpages/index.html");
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setUseWideViewPort(true);
webview.setInitialScale(1);
webview.canGoBack();
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack())
{
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
I am getting null pointer exception.
Solution
If I understand you correctly you could try and override the onKeyDown
function and react to the back key press.
WebView webview;
public void onCreate(...)
{
...
webview = (WebView) findViewById(...);
...
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack())
{
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
This will intercept when you press the back key, and if your webview has a history, it will go one step back in the history. If you are on the first page loaded and press back, it will terminate the webview activity and go back to your welcome activity.
Edit:
Yes, you could use onBackPressed
as well, I guess it would be more appropriate. As pointed out by njzk2 another approach would be.
@Override
public void onBackPressed()
{
if(mWebView.canGoBack())
{
mWebView.goBack();
}
else
{
super.onBackPressed();
}
}
Answered By - Zyber
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.