onActivityResult从一个片段到另一个片段

时间:2018-04-13 07:41:54

标签: android android-recyclerview

在我的recyclerview adapter中,我将onClick定义为:

 holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
          Snackbar.make(view, "View Clicked: "+Double.toString(position)+", "+current.getPlace(),
                  Snackbar.LENGTH_LONG).show();
         }
      });

此视图包含地点的latitudelongtidue。现在,我的目标是将LatLng传输到MapFragment上的OnActivityResult以显示地图。

在我的地图片段中,我已经有一个onActivityResult:

 int PLACE_PICKER_REQUEST = 1;

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
    try {
      startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
    } catch(GooglePlayServicesRepairableException |
        GooglePlayServicesNotAvailableException e) {
        e.printStackTrace();
    }
    return true;
  }

  // Get LatLng from placePicker
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PLACE_PICKER_REQUEST) {
      if (resultCode == Activity.RESULT_OK) {
        Place place = PlacePicker.getPlace(data, getContext());
        String toastMsg = String.format("Place: %s", place.getName());
        System.out.println(place);
        Snackbar.make(getView(), toastMsg, Snackbar.LENGTH_LONG).show();
        latlang.Lat = place.getLatLng().latitude;
        latlang.Lang = place.getLatLng().longitude;
        addMarker(place); 
 ....
}

由于我是java的新手,我无法解决如何将数据从适配器获取到此onActivityResult

伪代码将非常有用。

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我通过发送广播

这样实现

1,从你有纬度,经度的地方发送广播。

   Intent intente = new Intent("visible_text");
   intente.putExtra("lati", coordl1);
   intente.putExtra("longi", coordl2);
   intente.putExtra("name", strAddress);
   intente.putExtra("from", "drop");
   sendBroadcast(intente);
   finish();

2,现在无论你想要什么,你都可以进入你的片段/ adepter    #Register在简历中播放如下,

@Override
protected void onResume() {
    super.onResume();
registerReceiver(broadcast_reciever_visible_text,newIntentFilter("visible_text"));
}

3,现在在ondestroy方法中取消注册接收器,如下所示

 @Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(broadcast_reciever_visible_text);
}

4,现在你从接收器获得纬度或经度,它可能是全球性的,如下面

  BroadcastReceiver broadcast_reciever_visible_text = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        String action = intent.getAction();
        if (action.equals("visible_text")) {
            if (MyUtills.isNetworkAvailable(MainActivity.this)) {
                lati = intent.getExtras().getString("lati");
                longi = intent.getExtras().getString("longi");
                location_name = intent.getExtras().getString("name");
                TAG_FROM = intent.getExtras().getString("from");

               }
          }
    }
};

现在我希望你实现这个并开展快乐编码...