如何创建一个可用于将字符串数据发送到片段的方法?

How can I create a method that can I use to send string data to fragment?

提问人:Andy Jadeja 提问时间:8/11/2022 最后编辑:Andy Jadeja 更新时间:8/11/2022 访问量:36

问:

我创建了一个简单的 WebView 应用程序,其中包含一个 WebView 片段。

我有一个带有 5 到 6 个网站 URL 的导航抽屉,我想要的是当有人单击将在该 WebView 中打开的特定链接时。

单击的任何链接都会在单个 Web 视图片段中打开它。

我在 MainActivity 中创建了这个方法.java

public void sendData() {

        String[] urls = new String[5];

        urls[0] = getString(R.string.facebook_url);
        urls[1] = getString(R.string.instagram_url);
        urls[2] = getString(R.string.youtube_url);
        urls[3] = getString(R.string.telegram_url);
        urls[4] = getString(R.string.about_url);

        Fragment frag = new WebFragment();
        Bundle bundle = new Bundle();

        bundle.putString("weburl", urls[0]);
        bundle.putString("weburl", urls[1]);
        bundle.putString("weburl", urls[2]);
        bundle.putString("weburl", urls[3]);
        bundle.putString("weburl", urls[4]);

        frag.setArguments(bundle);
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.webContainer, frag).commit();
    } 

这是导航点击

@Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

       int id = item.getItemId();

       switch (id) {
           case R.id.fbMenu:
               sendData();
               break;

           case R.id.igMenu:
               sendData();
               break;

           case R.id.ytMenu:
               sendData();
               break;

           case R.id.teleMenu:
               sendData();
               break;

           case R.id.about:
               sendData();
               break;
       }

        return false;
    }

这就是 WebView Fragment

webView = view.findViewById(R.id.webViewFragment);

        Bundle bundle = this.getArguments();

        String webUrls = bundle.getString("weburl");
        webView.loadUrl(webUrls);

我不知道如何创建一个带有参数和所有参数的方法。

请帮忙

Android android-fragments 方法 webview

评论

0赞 Huib 8/11/2022
“带参数的方法”是什么意思?您遇到什么问题?
0赞 Andy Jadeja 8/11/2022
你看到sendData()方法了吗?
0赞 Andy Jadeja 8/11/2022
我想使用 sendData 方法将不同的 url 发送到片段 webview。
0赞 Arul 8/11/2022
你能分享网络片段代码吗
0赞 Andy Jadeja 8/11/2022
已经这样做了,检查 WebView Fragment。在 webview 片段中,我刚刚从 bundle 接收了数据。

答:

-1赞 Huib 8/11/2022 #1

sendData() 方法在这段代码中设置相同的 URL。每次使用 putString 方法设置“webUrl”时,它都会重写前面的

    bundle.putString("weburl", urls[0]);
    bundle.putString("weburl", urls[1]);
    bundle.putString("weburl", urls[2]);
    bundle.putString("weburl", urls[3]);
    bundle.putString("weburl", urls[4]);

因此,webview 将始终打开最后一个 URL (urls[4])。

我认为这就是你要找的:

public void sendData(String url) {
    ...
    Bundle bundle = new Bundle();

    bundle.putString("weburl", url);
    ...
}

并将开关更改为:

 switch (id) {
    case R.id.fbMenu:
        sendData(getString(R.string.facebook_url););
        break;

评论

0赞 Andy Jadeja 8/11/2022
嘿,谢谢,但是你能解释一下更多关于片段行的信息吗?因为它不起作用。我想我错过了什么
0赞 Huib 8/11/2022
你能说得更具体一点吗?使用您展示的代码,webview 片段应该可以工作。您始终可以使用调试器跟踪它,并检查带有 bundle.getString(“weburl”) 的行是否返回正确的 url。
0赞 Andy Jadeja 8/11/2022
它现在正在工作。非常感谢,朋友,你拯救了我的一天。
0赞 Arul 8/11/2022
bundle.putString(“weburl”, urls[4]);放置相同的名称将替换 bundle 中的值