بازگشت به آدرس اینترنتی (URL) قبلی در خود WebView، هنگام اشاره بر روی دکمه Back گوشی، در برنامه نویسی اندروید
زمانی که ما بر روی دکمه Back گوشی اشاره می کنیم، به طور پیش فرض، از Activity فعلی در برنامه اندروید، خارج شده و به Activity قبل تر می رویم. اما این عملکرد، برای هنگامی که یک WebView در Activity داشته باشیم، مطلوب نیست. مثلا فرض کنید که تعیین کرده باشیم که لینک ها درون خود WebView باز شوند (نمایش داده شوند)، بنابراین ممکن است که کاربر چند بار بر روی لینک های مختلف اشاره کرده باشد و اکنون بخواهد که برای برگشتن به آدرس های اینترنتی (URL) قبلی در WebView ، از دکمه Back گوشی استفاده کند. بنابراین در این مبحث، کدهای لازم برای تعیین WebView، هنگام اشاره بر روی دکمه Back گوشی را شرح خواهیم داد.
قبل از هر چیز، اجازه دسترسی به اینترنت را باید در فایل AndroidManifest.xml از پروژه اندروید ذکر کنیم. برای این منظور، باید کد زیر را در فایل AndroidManifest.xml بنویسیم :
محل قرارگیری کد بالا در فایل AndroidManifest.xml را می توانید در کدهای زیر مشاهده کنید :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kelidestan.com"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.kelidestan.com.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
همچنین در فایل xml متناظر با Activity ، باید یک عنصر WebView تعریف کنیم. به عنوان مثال، کدهای فایل xml را به صورت زیر می نویسیم :
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
در کد بالا، عنصر WebView ، کل صفحه را می پوشاند.
خوب اکنون کدهای فایل java مربوط به Activity را به صورت زیر می نویسیم :
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
public WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView1);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.loadUrl("http://www.kelidestan.com/android/index.php");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(webView.canGoBack()){
webView.goBack();
}else{
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
}
با خط زیر از کدها، تعیین کرده ایم که لینک ها درون خود عنصر WebView باز شوند (نمایش داده شوند)، زیرا در غیر این صورت، بازگشت به آدرس اینترنتی (URL) قبلی در خود WebView ، معنایی ندارد :
کدهایی هم که باعث می شوند، وقتی بر روی دکمه Back اشاره می کنیم، به آدرس اینترنتی قبلی در خود WebView برویم (نه خروج از Activity)، کدهای زیر می باشند :
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(webView.canGoBack()){
webView.goBack();
}else{
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
بنابراین با این نوع کدنویسی برای WebView ، با اشاره بر روی دکمه Back گوشی ، به آدرس اینترنتی قبلی در WebView می رویم. البته اگر آدرس قبلی دیگر نباشد (یعنی به اولین آدرس تعیین شده برای WebView برسیم)، از Activity خارج خواهد شد و به Activity قبلی بر می گردد.