Url 未使用 ViewModel 在 Webview 中加载

Url not loading in Webview using ViewModel

我正在尝试使用 ViewModel 从抽屉菜单 onDestinationChanged 加载多个 URL。 在我的 WebViewModel class 中,下面是 setUrlgetUrl 方法。

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 中设置值,它不会在片段中受到影响,因为视图模型不同.尝试维护相同的对象。