android - 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 父级之外,还有什么简单的方法可以做到这一点?
谢谢您的帮助。
解决方案
您可以以包的形式传递参数,并在片段对象上调用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");
推荐阅读
- python - 如何打印完整的金字塔?
- laravel-5 - 如何在 Laravel 的表中针对 json 编码数组检查字符串?
- c# - webservice保存文件后服务器刷新页面
- python - 如何使用 tensorflow 实现 keras 激活功能?
- abap - 如何在电子邮件中附加图片?
- c# - 泛型发生在 GDI+
- php - json_encode 不接受列或特殊章程或空白
- excel - 用于替换表中的值的宏
- kubernetes - 在私有 vpc 和 NAT 中连接 GCP Kubernetes
- flutter - Flutter - 在 pubspec.yaml 中添加 pub 包