【问题标题】:onActivityResult from one fragment to other [duplicate]onActivityResult 从一个片段到另一个[重复]
【发布时间】:2023-03-30 04:13:01
【问题描述】:

在我的recyclerviewadapter 中,我将 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

伪代码会很有帮助。

【问题讨论】:

  • 适配器是否在 MapFragment 中?还是在不同的片段中?
  • 适配器在另一个片段中
  • @HemantParmar:正如我所说,由于我没有java经验,我无法解决这个问题。我已经检查过您之前建议的链接,但不幸的是,这对我来说还不够
  • 给一些代码..通常我们不使用onactivityresult方法进行片段之间的通信。

标签: android android-recyclerview


【解决方案1】:

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

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,现在你可以随心所欲地进入你的 Fragment/adepter #在简历中注册广播,如下所示,

@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");

               }
          }
    }
};

现在我希望你实现这个并且工作快乐编码......

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多