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

时间:2017-07-12 02:07:46

标签: android android-fragments

我正在尝试将变量locDistance值传递给片段。我在Activity中有一个尝试过的代码:

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。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

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

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;
}

AND修改你的代码

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

现在您可以像这样检索locDistance值

Double distance = obj.getLocDistance();

答案 1 :(得分:0)

  

然后在onCreate()中获取片段中的值:

永远不会使用您显示的代码调用

// Fragment class Arguments Fragment obj = new Fragment(); obj.setArguments(bundle); 。 Fragment的no-arg构造函数是。

Accept:

此代码生成一个全新的片段,不会将任何内容传递给任何现有的片段。

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

How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?

当然,你可以在任何地方实现监听器,但是通过传回Activity,你可以将数据发送到一些现有的Fragment而不是尝试创建一个新的。