2010年11月25日 星期四

Android筆記_離開Activity時詢問是否離開

1. 建一個點連結還是保持在原程式的網頁瀏覽,並於讀取時顯示載入中。
2. 攔截點擊"返回鍵"事件,給予相對的反應。
3. 離開程式時,詢問是否離開。

-------------------------------------------
接下來第三部份,當使用者離開程式時,詢問是否離開。

也就是在需要離開程式時,跳出附有Button的AlertDialog,讓使用者選擇是否離開。

上圖的case1就是跳出的確認視窗,當使用者確定要離開時,則執行OlaTeach_WebView.this.finish()來離開Activity。case2就是該篇所顯示的ProgressDialog。

執行結果:


最後貼上三篇所有程式碼:

package ola.OlaTeach_WebView;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

public class OlaTeach_WebView extends Activity {
/** Called when the activity is first created. */

private WebView OlaWebView;
private TextView lab1;
private ProgressDialog Pd;

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
boolean CloseYN;
if (OlaWebView.canGoBack())
{
CloseYN = false;
OlaWebView.goBack();
}
else
{
show(1);
CloseYN = true;
}

event.startTracking();
return CloseYN;
}
return super.onKeyDown(keyCode, event);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

String strURI = "http://10.172.50.2/SSCenter_Web_C/SSCenterMain.aspx";
//String strURI = "http://tinyurl.com/yz3j7sc";
OlaWebView = (WebView) findViewById(R.id.myWebView1);
lab1 =(TextView) findViewById(R.id.TextView01);

OlaWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
lab1.setText("努力中");
show(2);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
lab1.setText("呼~~~完成");
Pd.hide();
super.onPageFinished(view, url);
}
});
OlaWebView.loadUrl(strURI);
}

public void show(int id) {
switch(id){
case 1:
new AlertDialog.Builder(OlaTeach_WebView.this)
.setTitle("你確定?")
.setMessage("要離開我了? T.T")
.setPositiveButton("沒錯",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which)
{
OlaTeach_WebView.this.finish();
}
})
.setNegativeButton("再留一下",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
}
})
.show();
break;
case 2:
Pd=new ProgressDialog(OlaTeach_WebView.this);
Pd.setTitle("我在讀取、別催我");
Pd.setMessage("努力中....");
Pd.show();
break;
default:
break;
}
}
}

7 則留言:

匿名 提到...

Ola大大~你好!

請問如果按home鍵

可以也出現這樣的詢問視窗嗎??

: P

ola的家 提到...

我沒有測試過是否可以監測home按下去,但是就想像來說,應該是不會開放,想要隨意離開app只有兩個途徑,一個是home鍵,一個是Back鍵,我的猜測是Back可以鎖以後,home鍵更不可能可以操作。

但按下home鍵時會呼叫onStop事件,或許可以做一些處理。

匿名 提到...

喔喔~

了解~

謝謝Ola大大解惑~

: P

匿名 提到...

大大您好,我有成功試過progressdialog,可以運行,不過在2.3.4上點第一個可以~到了點第2個就會報錯,會回到自己主程式的首頁,報錯地方是pd.show和pd.hide,但在4.0以上就沒這問題。想請問大大,我在網路上看到有人說使onstart都需要有個執行序讓程式先sleep,有用到會再啟動。想說會不會是執行完它只是在背後沒被關掉,那要怎麼關閉訊息呢?

ola的家 提到...

要使用的時候可以判斷progressdialog是否存在,來避免這個錯誤。

並且在Activity事件:onDestroy的時候呼叫dismiss方法,程式碼如下:

@Override
protected void onDestroy() {
super.onDestroy();
if (ExportProgressDialog!=null)
{
ExportProgressDialog.dismiss();
}
}

匿名 提到...

大大您好,已成功,^^~
想再請教大大,現在我用WEBVIEW讀取一個頁面,裡面有連結,但我點下去發現他沒反應,我是用這個web view client方法
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
沒有錯誤~但還是沒反應~

匿名 提到...

大大您好,剛剛我去找了這個方法,成功了~也分享給大大您
webView_post.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if(url.compareTo("about:blank") == 0)
{
finish();
}
else if(url.endsWith(".mp4"))
{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
finish();
}
return false;
}
}

張貼留言