将变量值从活动传递到片段时获取空数据



我正在尝试将变量locDistance值传递给片段。我在活动中尝试了以下代码:

protected void onPostExecute(Double distance) {
locDistance = distance;
Bundle bundle = new Bundle();
bundle.putDouble("distance", locDistance );
// Fragment class Arguments
Fragment obj = new Fragment();
obj.setArguments(bundle);
}

然后在片段中获取值,如下所示onCreate()

Double distance_value= getArguments().getDouble("distance");

但是我得到的值是0.0。任何帮助将不胜感激。

然后在 onCreate(( 中获取片段中的值,如下所示:

onCreate()永远不会使用您显示的代码进行调用。片段的无参数构造函数是。

// Fragment class Arguments
Fragment obj = new Fragment();
obj.setArguments(bundle);

此代码创建一个全新的片段,不会向任何现有片段传递任何内容。

如果你想从AsyncTask将数据传回其他类,你最好使用回调侦听器来实现它。

如何将 OnPostExecute(( 的结果获取到主活动,因为 AsyncTask 是一个单独的类?

当然,您可以在任何地方实现侦听器,但通过传递回活动,您可以将数据发送到某个现有的片段中,而不是尝试创建一个新的片段。

为了在创建片段的新实例时传递值,我建议您使用工厂模式。有关工厂模式的更多信息,只需谷歌一下,您将获得很多信息。现在,您可以尝试以下步骤:

在片段中创建静态方法。喜欢这个

private double locDistance = 0.0;
public static Fragment newInstance(double locDistance) {
Fragment fragment = new Fragment();
fragment.locDistance = locDistance;
return fragment;
}  
public double getLocDistance(){
return this.locDistance;
}

并像这样修改你的代码

protected void onPostExecute(Double distance) {
locDistance = distance;
Fragment obj = Fragment.newInstance(locDistance);
}  

现在你可以像这样检索位置距离值

Double distance = obj.getLocDistance();

最新更新