Url 未使用 ViewModel 在 Webview 中加载
Url not loading in Webview using ViewModel
我正在尝试使用 ViewModel 从抽屉菜单 onDestinationChanged
加载多个 URL。
在我的 WebViewModel
class 中,下面是 setUrl
和 getUrl
方法。
public class WebViewModel extends ViewModel {
private String TAG = this.getClass().getSimpleName();
private final MutableLiveData < String > url = new MutableLiveData < > ();
public void setUrl(String newUrl) {
Log.i(TAG, "SET URL: " + newUrl);
url.setValue(newUrl);
}
public LiveData < String > getUrl() {
if ((url == null)) {
setUrl("https://example.com");
}
return url;
}
}
并在 MainActivity 中 Class
private WebViewModel webViewModel;
我正在尝试像这样传递 url 地址
@Override
public void onDestinationChanged(@NonNull NavController controller,
@NonNull NavDestination destination, @Nullable Bundle arguments) {
webViewModel = ViewModelProviders.of(MainActivity.this).get(WebViewModel.class);
if (destination.getId() == R.id.nav_gallery) {
webViewModel = ViewModelProviders.of(MainActivity.this).get(WebViewModel.class);
webViewModel.setUrl("https://whosebug.com/");
} else if (destination.getId() == R.id.nav_slideshow) {} else {
toolbar.setVisibility(View.VISIBLE);
}
}
在 WebViewModel Class 中,如果我手动设置任何 URL 地址,此 url 将加载到片段 WebView 中。但是当我通过导航从 MainActivity Class 传递 URL 时,WebView 没有加载任何 URL.
在我使用以下代码的 WebView 片段中更进一步
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
webViewModel = ViewModelProviders.of(this).get(WebViewModel.class);
webViewModel.getUrl().observe(getViewLifecycleOwner(), new Observer < String > () {
@Override
public void onChanged(@Nullable String url) {
webView.loadUrl(url);
}
});
}
您从 activity 和片段创建了 2 次视图模型我认为这两个对象是不同的,如果您在 activity 中设置值,它不会在片段中受到影响,因为视图模型不同.尝试维护相同的对象。
我正在尝试使用 ViewModel 从抽屉菜单 onDestinationChanged
加载多个 URL。
在我的 WebViewModel
class 中,下面是 setUrl
和 getUrl
方法。
public class WebViewModel extends ViewModel {
private String TAG = this.getClass().getSimpleName();
private final MutableLiveData < String > url = new MutableLiveData < > ();
public void setUrl(String newUrl) {
Log.i(TAG, "SET URL: " + newUrl);
url.setValue(newUrl);
}
public LiveData < String > getUrl() {
if ((url == null)) {
setUrl("https://example.com");
}
return url;
}
}
并在 MainActivity 中 Class
private WebViewModel webViewModel;
我正在尝试像这样传递 url 地址
@Override
public void onDestinationChanged(@NonNull NavController controller,
@NonNull NavDestination destination, @Nullable Bundle arguments) {
webViewModel = ViewModelProviders.of(MainActivity.this).get(WebViewModel.class);
if (destination.getId() == R.id.nav_gallery) {
webViewModel = ViewModelProviders.of(MainActivity.this).get(WebViewModel.class);
webViewModel.setUrl("https://whosebug.com/");
} else if (destination.getId() == R.id.nav_slideshow) {} else {
toolbar.setVisibility(View.VISIBLE);
}
}
在 WebViewModel Class 中,如果我手动设置任何 URL 地址,此 url 将加载到片段 WebView 中。但是当我通过导航从 MainActivity Class 传递 URL 时,WebView 没有加载任何 URL.
在我使用以下代码的 WebView 片段中更进一步
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
webViewModel = ViewModelProviders.of(this).get(WebViewModel.class);
webViewModel.getUrl().observe(getViewLifecycleOwner(), new Observer < String > () {
@Override
public void onChanged(@Nullable String url) {
webView.loadUrl(url);
}
});
}
您从 activity 和片段创建了 2 次视图模型我认为这两个对象是不同的,如果您在 activity 中设置值,它不会在片段中受到影响,因为视图模型不同.尝试维护相同的对象。