首页 > 解决方案 > Android:使用片段在第一个活动中传递参数创建不同的网络

问题描述

我是编写 Android 应用程序的初学者。当第二个活动使用片段时,我在将参数从第一个活动传递到第二个活动时感到困惑。

这是我想做的。我想从第一个活动参数切换到显示相应网页的 webview 活动:routeName。

例如,如果 routeName = A,则显示 A.html。否则显示 default.html

这是我的编码:

在第一个活动中:

  Intent intent = new Intent(getActivity(), RouteInfoWebActivity.class);
  intent.putExtra("routeName", routeName);
  startActivity(intent);

WebView Activity 和 Fragment 类

    public class RouteInfoWebActivity extends FragmentHolder {
      private RouteInfoWebFragment routeInfoWebFragment;
      public RouteInfoWebActivity() {
        routeInfoWebFragment = new RouteInfoWebFragment(getIntent().getExtras().getString("routeName","defaultKey"));
      }
      protected Fragment fragment() { return routeInfoWebFragment; }

      @Override
      public void onBackPressed() {
        RouteInfoWebFragment routeWeb = (RouteInfoWebFragment) routeInfoWebFragment;
        WebView htmlView = routeWeb.getWebView();

        if (htmlView.canGoBack()) {
          htmlView.goBack();
        } else {
          super.onBackPressed();
        }
      }
    }


public class RouteInfoWebFragment extends LocalWebFragment {
    String url = "";
    public RouteInfoWebFragment(String routeName) {
    If (routename == 'A') {
        url == 'A.html';
        } else {
                url = 'default.html';
        }

        super("file:///android_asset/"+url, R.layout.route_web);
    } 


    @Override
    public View onCreateView(final LayoutInflater inflater,
                             final ViewGroup container,
                             final Bundle savedInstanceState) {

        final View routeWebView = super.onCreateView(inflater, container, savedInstanceState);

        return routeWebView;
    } // onCreateView

但是,这样做时我在 Fragment 类中看到了警告:Avoid non-default constructor in Fragment。

因为我已经在“LocalWebFragment”中设置了所有相应的属性,我不想更改它。

我知道在片段中我可以使用新实例在将其链接到活动之前传递参数。但是,想知道如何在我的情况下做到这一点?除了创建一个新的 Fragment 父级之外,还有什么简单的方法可以做到这一点?

谢谢您的帮助。

标签: androidandroid-fragments

解决方案


您可以以包的形式传递参数,并在片段对象上调用setArguments(Bundle bundle) 。在您的片段中,您可以通过调用getArguments()并从该捆绑包中提取您想要的内容来获取值。

编辑

首先,您需要获取片段的对象并设置参数。

Fragment fragment = new RouteInfoWebFragment();
Bundle bundle = new Bundle();
bundle.putString("routeName", routeName);
fragment.setArguments(bundle);

然后在您的片段类中,您可以简单地获取 routeName 的值

Bundle arguments = getArguments();
String routeName = arguments.getString("routeName");

推荐阅读