2013-01-09 60 views
2

在我的應用程序中,我加載了一個WebView,其中用戶輸入用戶名/密碼,並且我不希望webview在用戶不小心點擊web視圖外部時關閉使另一個網絡調用來加載這個webview。防止在webview之外單擊時關閉WebView

我知道這可以完成對話框(如:dialog.setCanceledOnTouchOutside(true);),但無法找到類似的webview機制。

謝謝!

下面是代碼:

@SuppressLint("SetJavaScriptEnabled") 
public class LoginDialogFragment extends DialogFragment { 

private static final String TAG = LoginDialogFragment.class.getSimpleName(); 

View mainView = null; 
WebView webView = null; 
OnLoginSucceeded loginSucceeded = null; 

ProgressBar progressBar = null; 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    mainView = inflater.inflate(R.layout.webview, container, false); 

    if (getDialog() != null) 
     getDialog().setTitle(getString(R.string.login)); 

    webView = (WebView) mainView.findViewById(R.id.webview); 

    //display the progress bar 
    progressBar = (ProgressBar) mainView.findViewById(R.id.user_profile_loading_progress); 
    progressBar.setVisibility(View.VISIBLE); 

    //turn caching off 
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setPluginsEnabled(true); 

    webView.setWebChromeClient(new WebChromeClient() { 
    }); 

    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      Log.i(TAG, "URL received in onCreateView's onPageStarted is: " + url); 
      new HandleRequest().execute(url); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
     } 
    }); 

    new FetchLoginFormTask().execute(); 

    return mainView; 
} 
+0

在哪個窗口小部件中打開webview?任何對話或任何..... .....請設置setCanceledOnTouchOutside(false)而不是true。你有沒有嘗試setCancelable(false)? –

+0

@iDroidExplorer這個webview被顯示在一個View中,它本身就是DialogFragment的一部分,因此我不能使用你建議的方法。 –

+0

我更新了我的文章w /我所指的代碼。 –

回答

0

與覆蓋想盡了辦法:

@Override 
public void setCancelable(boolean cancelable) { 

    super.setCancelable(false); 
} 

如果您的問題沒有得到這個解決,那麼請把一些代碼,所以我可以幫你。

歡迎發表評論。

+0

覆蓋setCancelable實際上並沒有幫助,因爲我需要一個類似於'dialog.setCanceledOnTouchOutside(true);'的函數,並且我擴展了DialogFragment而不是Dialog。 FetchLoginFormTask()和HandleRequest()是顯示具有諸如Google,Facebook等身份提供者的登錄的方法。 –

1

I found my answer here我剛剛使用getDialog().setCanceledOnTouchOutside(false);確保當單擊後退鍵時,webview被解除。