难以从其他活动/类控制webview

时间:2015-02-08 08:12:48

标签: java android android-webview android-adapter android-recyclerview

现在看来,在我写的应用程序中,我有NavigationDrawerFragment导航抽屉,其中RecyclerView通过另一个类中的适配器填充,WebView个我的MainActivity。我正处于从RecyclerView的适配器处获得点击处理的位置,我想要做的是在点击WebView时将不同的内容加载到MainActivity中导航抽屉中的RecyclerView项。我设法用Intents和putExtra()实现了一种方法来实现这一点,但它涉及重新启动MainActivity,它感觉非常笨重,并且真正打破了我从一开始就打算实现的无缝UX。

我在想,也许我可以将WebView作为Fragment并在MainActivity中对其进行充气,也许这可以让我从RecyclerView控制它适配器?我对Android和Java都很陌生,到目前为止我一直在关注这些例子,所以我真的不知道将会有什么成就,而且我想知道什么时候我能够回到我正确的编码环境。我的笔记本电脑并不是最好的,因为编译和运行需要很长时间。

我想我要问的是,如果我的这个想法是正确的方法,如果没有,那会是什么?

1 个答案:

答案 0 :(得分:1)

Fragment就足够了:

public class WebViewFragment extends Fragment {
    public static final String TAG = WebViewFragment.class.getName();
    public WebView mWebView;

    ...  

    public void updateWebView(String url) {
        mWebView.loadUrl(url);
    }
}

您始终可以通过标记(或ID)找到Fragments

get[Support]FragmentManager().findFragmentById(int id);
get[Support]FragmentManager().findFragmentByTag(String tag);

并调用方法:

WebViewFragment webViewFragment = (WebViewFragment) get[Support]FragmentManager().findFragmentByTag(WebViewFragment.TAG);
webViewFragment.updateWebView(url);

您应该在NavigationDrawer所在的WebViewFragment中添加Activity

最终解决方案:

@Override
public void itemClicked(View view, int position) {
    Toast.makeText(getActivity(), "clicked " + (position+1), Toast.LENGTH_SHORT).show();
    WebView webView = (WebView) getActivity().findViewById(R.id.webview);
    webView.loadUrl(...your url here...)
}