У меня есть список, и мне нужно отобразить все веб-сайты из этого списка в Loop один за другим в WebView. Между переходом с одного веб-сайта на другой я имею также индивидуальное время, которое также находится в другом списке с одинаковым размером.Android - Отображать URL-адреса в Webview из списка с разными временами один за другим
Но если я попытаюсь отобразить сайт в WebView, он иногда пропускает веб-сайт, а время неточно. Может кто-нибудь улучшить мой код, пожалуйста, и скажите мне, где это имеет значение?
public class WebshowActivity extends AppCompatActivity {
private List<String> htmlSites = new ArrayList<>();
private List<Integer> timeForSite = new ArrayList<>();
private int counter = 0;
WebView webView;
boolean firstCall = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webshow);
//Fullscreen settings
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
//implement list from utils
timeForSite.add(10);//this is the 0th index and it's needed for the first URL load which is emepty
for (int i = 0; i < Utilities.list.size(); i++) {
htmlSites.add(Utilities.list.get(i).getPath());
timeForSite.add(Utilities.list.get(i).getDuration());
}
//WebView
webView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl("");
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
Toast.makeText(WebshowActivity.this, "Time for this Website: " + timeForSite.get(counter) + "ms", Toast.LENGTH_SHORT).show();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadUrl(htmlSites.get(counter));
counter++;
if (firstCall == true) {
timeForSite.remove(0);
firstCall = false;
} else {
counter++;
}
if (counter == htmlSites.size()) {
counter = 0;
}
}
}, timeForSite.get(counter));
}
});
}
}
Перечни находятся в другом классе, но я думаю, что ошибка находится внутри onPageFinished метода.
спасибо! Он работает нормально, но у меня есть только проблема со временем. Это не всегда постоянно. –
Чем вам нужен таймер или CountDownTimer вместо обработчика. Потому что обработчик полагается на поток пользовательского интерфейса, а не на то, чтобы его можно было назначать – j2ko
@htlstudent. Я обновил ответ, используя таймер. Это должно быть более точно. – j2ko