Android 在webView中处理后退按钮

Android 在webView中处理后退按钮,android,webview,Android,Webview,我有一个android项目,我想在使用webview时处理片段中的后退按钮。当我使用webView并单击多个链接,然后单击上一步时。它关闭应用程序。我怎样才能让它转到后面的页面。到目前为止,我已经做了以下工作: public class NewsFragment extends Fragment { private ProgressDialog progressDialog; private WebView myWebView ; public NewsFragment() {

我有一个android项目,我想在使用webview时处理片段中的后退按钮。当我使用webView并单击多个链接,然后单击上一步时。它关闭应用程序。我怎样才能让它转到后面的页面。到目前为止,我已经做了以下工作:

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”无法解决错误?