【问题标题】:Passing String From Activity to Fragment将字符串从 Activity 传递到 Fragment
【发布时间】:2014-09-01 11:25:36
【问题描述】:

我的 Activty 代码 sn-p 是实现 GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener:

@Override
public void onConnected(Bundle bundle) {
        getCurrentLocation();        
}
public void getCurrentLocation() {
    if (this.servicesConnected()) {
        mLocationClient.requestLocationUpdates(mLocationRequest, this);
        mCurrentLocation = mLocationClient.getLastLocation();
        ArrayList<Address> addresses = null;
        try {
            latitude = String.valueOf(mCurrentLocation.getLatitude());
            longitude = String.valueOf(mCurrentLocation.getLongitude());
            addresses = (ArrayList<Address>) gCoder.
                    getFromLocation(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude(), 1);
            mLocationClient.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        } 
        if (addresses != null && addresses.size() > 0) {
            Log.wtf("Arsnal", "" + addresses.get(0).getLocality());
        } else {
            Toast.makeText(this, R.string.no_address_found, Toast.LENGTH_LONG).show();
        }
        Log.wtf("Location", "Lat " + latitude + " - lon " + longitude);
    }
}

我想要的只是在我的片段中获取字符串纬度和经度,即

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.wtf("check","Inside OnCreate of Fragment!");
    Log.wtf("check","Latitude"+((MyActivuty)getActivity()).latitude+
"Longitude"+((MyActivuty)getActivity()).longitude);
}

我在这一行得到了 NPE,即

 Log.wtf("check","Latitude"+((MyActivuty)getActivity()).latitude+
"Longitude"+((MyActivuty)getActivity()).longitude);

因为在片段的 OnCreate() 之后调用了 onComplete 方法。我可以解决这个问题吗? 任何帮助表示赞赏!谢谢

【问题讨论】:

  • 有两种选择。 1)以共享偏好保存数据。 2)通过Bundle传递数据。
  • 什么时候调用getCurrentLocation?
  • 它在 OnCoonected 覆盖方法中调用
  • 你的片段什么时候使用坐标?
  • 您也可以使用片段的setArgument() 作为参数传递。

标签: java android android-activity android-fragments google-play-services


【解决方案1】:

在片段内部创建回调函数:

public void initFragment() {
    // Coordinates are available do something with them
    // ((MyActivuty)getActivity()).latitude
    // ((MyActivuty)getActivity()).longitude
}

然后在您的活动中保存对创建片段的引用:

MyFrag myFrag
...
myFrag = new MyFrag();
...

并在坐标准备好时调用片段的函数:

public void getCurrentLocation() {
    ...
    myFrag.initFragment();
}

【讨论】:

  • 感谢这对我有用。 @user3249477 请你认为你可以就这个问题给我你的意见stackoverflow.com/questions/25598696/…
  • 确保它确实有效。但我的情况是,我使用的是多个片段,这些片段是我使用适配器创建的,而不是使用单个片段
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多