2016-03-28 81 views
0

我想显示一个启动画面,直到应用完成加载URL。
搜索后,我发现一个解决方案 - Splash screen while loading a url in a webview in android app无法通过编号获取ImageView

但我无法实现它在我当前的代码。尝试按ID获取启动图像视图时出现错误消息。

这里是我的代码:

public class MyAppWebViewClient extends WebViewClient { 

    private final Context context; 

    public MyAppWebViewClient(Context context) { 
     this.context = context; 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     if (url.contains("?dl=1")) { 
      Uri source = Uri.parse(url); 
      // Make a new request pointing to the download url 
      DownloadManager.Request request = new DownloadManager.Request(source); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
       request.allowScanningByMediaScanner(); 
       request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
      } 

      String fileExtension = MimeTypeMap.getFileExtensionFromUrl(url); 
      String fileName = URLUtil.guessFileName(url, null, fileExtension); 

      // save the file in the "Downloads" folder of SDCARD 
      request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); 
      // get download service and enqueue file 
      DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 
      manager.enqueue(request); 
      return true; 
     } 



     if (Uri.parse(url).getHost().contains("www.example.com")) { 
      return false; 
     } 

     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     view.getContext().startActivity(intent); 
     return true; 
    } 

    @Override 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     view.loadUrl("file:///android_asset/offline.html"); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     //hide loading image 
     myImageView = (ImageView) findViewById(R.id.activity_splash_logo).setVisibility(View.GONE); 
     //show webview 
     view.findViewById(R.id.activity_main_webview).setVisibility(View.VISIBLE); 
    } 

} 

和activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.myapp.MainActivity"> 

    <WebView 
     android:id="@+id/activity_main_webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="gone"/> 
    <ImageView 
     android:id="@+id/activity_splash_logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:src="@mipmap/splash_logo" 
     android:visibility="visible" 
     /> 
</RelativeLayout> 

在此行中存在的问题:

myImageView = (ImageView) findViewById(R.id.activity_splash_logo).setVisibility(View.GONE); 

mainactivity.java

package com.myapp; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 

public class MainActivity extends AppCompatActivity { 

    private static final int REQUEST_WRITE_EXTERNAL_STORAGE = 0; 
    private WebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mWebView = (WebView) findViewById(R.id.activity_main_webview); 

     // Stop local links and redirects from opening in browser instead of WebView 
     mWebView.setWebViewClient(new MyAppWebViewClient(MainActivity.this)); 

     mWebView.loadUrl("http://www.example.com/"); 

     // Enable Javascript 
     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 


     // Request required permission 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
        REQUEST_WRITE_EXTERNAL_STORAGE); 
     } 

     // Add user agent suffix 
     this.mWebView.getSettings().setUserAgentString(
       this.mWebView.getSettings().getUserAgentString() 
         + " " 
         + BuildConfig.APPLICATION_ID 
         + "/" 
         + BuildConfig.VERSION_CODE 
     ); 
    } 

    // Prevent the back-button from closing the app 
    @Override 
    public void onBackPressed() { 
     if (mWebView.canGoBack()) { 
      mWebView.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

} 
+0

您链接的帖子在“Activity”中有代码,您可以在其中调用findViewById。你的代码在'WebViewClient'中,所以你不能调用'findViewById',因为那不是该类的一个方法。 –

回答

1

您需要实现onPageFinished Activity类中,如果你想使用findViewById

此外,如果你不需要对飞溅图像的引用,那么不要保留一个。

mWebView = (WebView) findViewById(R.id.activity_main_webview); 

mWebView.setWebViewClient(new MyAppWebViewClient(MainActivity.this) { 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     //hide loading image 
     findViewById(R.id.activity_splash_logo).setVisibility(View.GONE); 
     //show webview 
     mWebView.setVisibility(View.VISIBLE); 
    } 
}); 

mWebView.loadUrl("http://www.example.com/"); 
+0

此代码正在运行,但启动屏幕不工作,因为它应该.....作为链接的问题 – baalal

+0

我没有你的设备,所以我不知道你在看什么,但如果这解决了你的代码没有运行的问题,那么我建议你接受这个答案,并做一个新的职位来描述你的意思是“应该的”。 –

0

拆分此行

myImageView = (ImageView) findViewById(R.id.activity_splash_logo).setVisibility(View.GONE); 

成两个单独的语句

myImageView = (ImageView) findViewById(R.id.activity_splash_logo); 
myImageView.setVisibility(View.GONE); 
+0

错误:(78,9)错误:无法找到符号变量myImageView 错误:(78,35)错误:找不到符号方法findViewById(int) – baalal

0

你不能用任何视图上下文中使用findViewById。因为您没有任何View参考。

无论您正在调用还是启动以下代码,您都必须初始化或调用findViewById。

WebView myWebView = (WebView) findViewById(R.id.webview); 
myWebView.setWebViewClient(new MyWebViewClient()); 

Initiate this also

myImageView = (ImageView) findViewById(R.id.activity_splash_logo); 
1

你无所不包类不是ActivityWebViewClient类中没有findViewbyId()

+0

如何解决此问题..任何想法.. – baalal

+0

我已更新题。请检查。 – baalal

+0

而不是将MyAppWebViewClient作为公共类,使其成为MainActivity的内部类。然后,您将获得findViewById(),而不会有任何问题。顺便说一句,在那之后你还需要关心@Bob Malooga的案例。 –

0

尝试:

ImageView myImageView = 
     (ImageView) findViewById(R.id.activity_splash_logo).setVisibility(View.GONE); 
+0

你测试过这个代码是否可以工作吗? – timothymarois

+0

这不会编译... – Floern