Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回按钮在WebView-Android中未按预期运行_Java_Android - Fatal编程技术网

Java 返回按钮在WebView-Android中未按预期运行

Java 返回按钮在WebView-Android中未按预期运行,java,android,Java,Android,我有4个片段,使用查看页面和选项卡在主要活动中显示新闻。然而,我的代码只适用于第一个片段,即tab1 在我的主要活动中 @Override public void onBackPressed() { WebView mWebView = (WebView) findViewById(R.id.webview); if (mWebView.getVisibility() == View.VISIBLE) { mWebView.se

我有4个片段,使用查看页面和选项卡在主要活动中显示新闻。然而,我的代码只适用于第一个片段,即tab1

在我的主要活动中

 @Override
    public void onBackPressed() {

        WebView mWebView = (WebView) findViewById(R.id.webview);
        if (mWebView.getVisibility() == View.VISIBLE) {
            mWebView.setVisibility(View.GONE);
            mWebView.loadUrl("about:blank");
        }
        else {

            super.onBackPressed();
        }

        return;
    }
所以,当按下“后退”按钮时,它会通过将用户带回主布局来隐藏那个里的web视图。它适用于表1

但在片段2、3、4中,当我按下后退按钮时,它退出应用程序。我使用与片段1相同的代码

我发现-mWebView.getVisibility()==View.VISIBLE并没有变为真-即使片段2,3,4的web视图是可见的

片段1代码:

public class WSJFragment extends Fragment implements LoaderManager.LoaderCallbacks<List<News>> {


    .........


    public WSJFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.newsview, container, false);

        ............

        NewsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                // Find the current earthquake that was clicked on
                News currentNews = mAdapter.getItem(position);


                String newsUrl = currentNews.getUrl();

                progress.setVisibility(View.VISIBLE);

                mWebView.setVisibility(View.VISIBLE);

                mWebView.loadUrl(newsUrl);

                mWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public void onPageFinished(WebView view, String url) {
                        super.onPageFinished(mWebView, url);
                        progress.setVisibility(View.GONE);

                    }

                });


            }


        });


        return rootView;
    }


    ........

}
公共类WSJFragment扩展片段实现LoaderManager.LoaderCallbacks{
.........
公共WSJFragment(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
rootView=充气机。充气(R.layout.newsview,container,false);
............
NewsListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
//查找单击的当前地震
News currentNews=mAdapter.getItem(位置);
字符串newsUrl=currentNews.getUrl();
progress.setVisibility(View.VISIBLE);
mWebView.setVisibility(View.VISIBLE);
loadUrl(新闻URL);
setWebViewClient(新的WebViewClient()){
@凌驾
公共void onPageFinished(WebView视图,字符串url){
super.onPageFinished(mWebView,url);
progress.setVisibility(View.GONE);
}
});
}
});
返回rootView;
}
........
}

我已签入您的代码,请进行此更改

在MainActivity中替换为此

@Override
public void onBackPressed() {

    if(mWebView != null){
        if (mWebView.getVisibility() == View.VISIBLE) {
            mWebView.setVisibility(View.GONE);
            mWebView.loadUrl("about:blank");
        }else {
            finish();
        }
    }else{ //if webview is null do something... here
    }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.newsview, container, false);

    MainActivity.mWebView = (WebView) rootView.findViewById(R.id.webview);
    MainActivity.mWebView.setVisibility(View.GONE);

   //your remaining code here

 return rootView;
}
在所有4个片段中,替换为此

@Override
public void onBackPressed() {

    if(mWebView != null){
        if (mWebView.getVisibility() == View.VISIBLE) {
            mWebView.setVisibility(View.GONE);
            mWebView.loadUrl("about:blank");
        }else {
            finish();
        }
    }else{ //if webview is null do something... here
    }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.newsview, container, false);

    MainActivity.mWebView = (WebView) rootView.findViewById(R.id.webview);
    MainActivity.mWebView.setVisibility(View.GONE);

   //your remaining code here

 return rootView;
}

在您找到“mWebView”对象的每个片段中,将其替换为MainActivity.mWebView

WebView mWebView=(WebView)findViewById(R.id.WebView);应该类似于此WebView mWebView=(WebView)inflaterView.findViewById(R.id.WebView);rootView=充气机。充气(R.layout.newsview,container,false);mWebView=(WebView)rootView.findViewById(R.id.WebView);我有这样的。这不是问题OK,但在OnBackPressed()中,如果我使用全局变量,请使用globle variable,并移动mWebView=(Webview)findViewById(R.id.Webview);若要在mainactivity中重新创建,请在按下后退按钮时应用程序崩溃。空指针用于制表符1。。所以我不知道是什么原因导致了其他使用相同逻辑的实验室我能够通过打开一个新的活动并传递到该活动的链接并从那里打开webview来解决这个问题。我还解释了为什么android在4个片段中创建多个webview实例时会发生这种情况。因此,它无法始终识别父活动onBackPressed()中的哪一个,因此它将使用找到的第一个。即使声明static,也是一样的,因为在一个变量中创建并存储了多个变量。因此,它无法区分4个web视图实例