2013-01-09 31 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被解除。