Я работаю над приложением с панелью навигации, которая может отображать несколько экранов. Все эти страницы отображаются в пределах одного и того же Activity
, но надуваются в обертку.
<android.support.design.widget.CoordinatorLayout
//some parameters
<include
android:id="@+id/main_container"
layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
Один из этих экранов содержит WebView
.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/webview_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/app_bar_main">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
К веб-представлению я прикрепляю WebViewClient
для обработки некоторых HTML-манипуляций с Javascript.
WebView webView = findViewById(R.id.web_view);
if (webView == null) {
inflateLayout(R.layout.layout_with_webview);
webView = findViewById(R.id.web_view);
}
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new CustomWebViewClient());
webView.loadUrl("http://www.somesite.com");
Если я добавлю WebView
в макет, который загружается с setContentView()
, когда начинается действие, все загружается правильно. После этого я надуваю другой макет в main_container
, используя следующий код:
public void inflateLayout(int toinflate) {
ConstraintLayout mainLayout = findViewById(R.id.main_container);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(toinflate, null);
mainLayout.removeAllViews();
mainLayout.addView(layout);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
Когда я теперь хочу накачать макет, содержащий WebView
, при вызове webView.loadUrl("some url")
ничего не отображается, хотя вызывается метод onPageFinished(...)
.
Теперь вопрос: что я делаю не так и как я могу использовать WebViews, которые прикреплены к экрану, используя инфляцию.
Также: я уже пытался добавить WebView, используя addView
, и он не работал.