Android 在webView中处理后退按钮
我有一个android项目,我想在使用webview时处理片段中的后退按钮。当我使用webView并单击多个链接,然后单击上一步时。它关闭应用程序。我怎样才能让它转到后面的页面。到目前为止,我已经做了以下工作:Android 在webView中处理后退按钮,android,webview,Android,Webview,我有一个android项目,我想在使用webview时处理片段中的后退按钮。当我使用webView并单击多个链接,然后单击上一步时。它关闭应用程序。我怎样才能让它转到后面的页面。到目前为止,我已经做了以下工作: public class NewsFragment extends Fragment { private ProgressDialog progressDialog; private WebView myWebView ; public NewsFragment() {
public class NewsFragment extends Fragment {
private ProgressDialog progressDialog;
private WebView myWebView ;
public NewsFragment()
{
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_news, container, false);
myWebView = (WebView) rootView.findViewById(R.id.mwl_Website);
myWebView.setWebViewClient(new WebViewClient());
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.requestFocusFromTouch();
myWebView.setVerticalScrollBarEnabled(true);
myWebView.setHorizontalScrollBarEnabled(true);
myWebView.setVerticalScrollBarEnabled(true);
myWebView.setHorizontalScrollBarEnabled(true);
myWebView.requestFocusFromTouch();
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setLoadWithOverviewMode(true);
myWebView.addJavascriptInterface(new WebAppInterface(getActivity()), "Android");
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl(getResources().getString(R.string.WEBSITE));
new LoadViewTask().execute();
rootView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == android.view.KeyEvent.ACTION_DOWN) {
if ((keyCode == android.view.KeyEvent.KEYCODE_BACK)) {
if(myWebView!=null)
{
if(myWebView.canGoBack())
{
myWebView.goBack();
}
}
}
}
return true;
}
});
return rootView;
}
private class LoadViewTask extends AsyncTask<Void, Integer, Void>
{
//Before running code in separate thread
@Override
protected void onPreExecute()
{
progressDialog = ProgressDialog.show(getActivity(),"Loading...",
"Loading please wait...", false, false);
}
//The code to be executed in a background thread.
@Override
protected Void doInBackground(Void... params)
{
/* This is just a code that delays the thread execution 4 times,
* during 850 milliseconds and updates the current progress. This
* is where the code that is going to be executed on a background
* thread must be placed.
*/
try
{
//Get the current thread's token
synchronized (this)
{
//Initialize an integer (that will act as a counter) to zero
int counter = 0;
//While the counter is smaller than four
while(counter <= 4)
{
//Wait 850 milliseconds
this.wait(1000);
//Increment the counter
counter++;
//Set the current progress.
//This value is going to be passed to the onProgressUpdate() method.
publishProgress(counter*25);
}
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return null;
}
//Update the progress
@Override
protected void onProgressUpdate(Integer... values)
{
//set the current progress of the progress dialog
progressDialog.setProgress(values[0]);
}
//after executing the code in the thread
@Override
protected void onPostExecute(Void result)
{
//close the progress dialog
progressDialog.dismiss();
}
}
公共类新闻片段扩展片段{
私有进程对话;
私有网络视图myWebView;
公共新闻片段()
{
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图根视图=充气机。充气(R.layout.fragment\u news,container,false);
myWebView=(WebView)rootView.findviewbyd(R.id.mwl_网站);
setWebViewClient(新的WebViewClient());
myWebView.getSettings().SetBuilTinZoomControl(true);
myWebView.requestFocusFromTouch();
myWebView.setVerticalScrollBarEnabled(true);
myWebView.setHorizontalScrollBarEnabled(true);
myWebView.setVerticalScrollBarEnabled(true);
myWebView.setHorizontalScrollBarEnabled(true);
myWebView.requestFocusFromTouch();
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().SetLoadWithOverview模式(true);
addJavascriptInterface(新的WebAppInterface(getActivity()),“Android”);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl(getResources().getString(R.string.WEBSITE));
新建LoadViewTask().execute();
setOnKeyListener(新视图.OnKeyListener(){
@凌驾
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
if(event.getAction()==android.view.KeyEvent.ACTION\u向下){
if((keyCode==android.view.KeyEvent.keyCode\u BACK)){
如果(myWebView!=null)
{
if(myWebView.canGoBack())
{
myWebView.goBack();
}
}
}
}
返回true;
}
});
返回rootView;
}
私有类LoadViewTask扩展了AsyncTask
{
//在单独的线程中运行代码之前
@凌驾
受保护的void onPreExecute()
{
progressDialog=progressDialog.show(getActivity(),“正在加载…”,
“正在加载,请稍候…”,错误,错误);
}
//要在后台线程中执行的代码。
@凌驾
受保护的Void doInBackground(Void…参数)
{
/*这只是一个延迟线程执行4次的代码,
*并更新当前进度。此
*将在后台执行的代码的位置
*线必须放好。
*/
尝试
{
//获取当前线程的令牌
已同步(此)
{
//将整数(用作计数器)初始化为零
int计数器=0;
//而计数器小于4
而(counter您面临的问题是调用了您的onBackPressed()
,您需要覆盖它-
像这样-
@Override
public void onBackPressed() {
if(myWebView!=null) {
if (webView.canGoBack()) {
webView.goBack();
}
}
super.onBackPressed();
}
可能重复的在那个例子中,他在一个活动中使用了webview。我在一个片段中使用webview。不过,我会试试看,你的意思是我应该在OnCreateView完成后放置你的代码。我在super.onBackPressed()中有一个错误;它说:无法解析onBackPressed方法..onCreate's'}'来。尝试编写'onback'并自动完成它,您将获得此方法。否则,您可以按原样编写此代码块。是的,陛下。但我的“onBackPressed”无法解决错误?