【问题标题】:how i can get onActivityResult in fragment from secondActivity我如何从 secondActivity 的片段中获取 onActivityResult
【发布时间】:2017-12-08 16:19:52
【问题描述】:

从片段我启动了 FirstActivity,从 FirstActivity 我启动了一个 SecondActivity。我如何从 SecondActivity 的片段中获取 onActivityResult。 我尝试在 firstActivity 中添加 android:noHistory="true"。

有没有办法做到这一点? 提前致谢

片段活动

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    hotelImageMain.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(myContext, HotelsByLocation.class);
        intent.putExtra(HotelActivity.EXTRA_PARAM_FOR_RESULT, true);
        intent.putExtra(HotelsByLocation.EXTRA_PARAM_LOCATION_NAME, App.getInstance().getDayList().get(AddHotels.viewPager.getCurrentItem()).get(App.HASHMAP_PARA_CITY_NAME));
        intent.putExtra(HotelsByLocation.EXTRA_PARAM_LOCATION_ID, App.getInstance().getDayList().get(AddHotels.viewPager.getCurrentItem()).get(App.HASHMAP_PARA_CITY_ID));
        startActivityForResult(intent, MY_REQUEST_CODE_TWO);
     }
 });


@Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      if (requestCode == MY_REQUEST_CODE_TWO) {
                  if (resultCode == Activity.RESULT_OK) {
                      Toast.makeText(myContext, "Welcome Back from HotelsByLocation", Toast.LENGTH_SHORT).show();
                      HashMap<String, String> map = new HashMap<String, String>();
                      map.put(App.HASHMAP_PARA_CITY_NAME, data.getStringExtra("cname"));
                      map.put(App.HASHMAP_PARA_CITY_ID, data.getStringExtra("cid"));
                      map.put(App.HASHMAP_PARA_HOTEL_NAME, data.getStringExtra("name"));
                      map.put(App.HASHMAP_PARA_HOTEL_IMAGE, data.getStringExtra("img"));
                      App.getInstance().getDayList().set(AddHotels.viewPager.getCurrentItem(),map);
                      hotel_name_main.setText(data.getStringExtra("name"));
                      Picasso.with(myContext)
                              .load(data.getStringExtra("img"))
                              .error(R.drawable.ic_empty)
                              .placeholder(R.drawable.ic_empty)
                              .into(hotelImageMain);

      }
      } else if (resultCode == Activity.RESULT_CANCELED) {
          // some stuff that will happen if there's no result
          Toast.makeText(myContext, "you haven't selected", Toast.LENGTH_SHORT).show();
      }
  }

第一个活动

mmAdapter.setOnItemClickListener(new HATwo.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
       Intent intent = new Intent(FirstActivity.this,SecondActivity.class);                             
       intent.putExtra(MyActivity.EXTRA_PARAM_HOTEL_ID, mPhotosList.get(position).getId());                      
       intent.putExtra(MyActivity.EXTRA_PARAM_HOTEL_NAME, mPhotosList.get(position).getTitle());                                    
       intent.putExtra(HotelActivity.EXTRA_PARAM_FOR_RESULT, true);
      //startActivityForResult(intent, MY_REQUEST_CODE_TWO);
       startActivity(intent);

第二个活动

public void onClick(View v) {
    Intent intent = new Intent();
    intent.putExtra("name",nameOfTheHotel );
    intent.putExtra("id", hotelId);
    setResult(Activity.RESULT_OK, intent);
    finish();
}

【问题讨论】:

  • 因此,如果我理解正确,您想要的是从您的第二个活动返回片段的一些数据。对吧??
  • 是的...我希望它在 onActivityResult 中对片段进行更改。
  • 还有一件事是您想要片段的 onActivityResult 方法中的结果有什么具体原因吗?当您从 Activity2 返回到片段时,您可以轻松地对片段进行必要的更改。

标签: java android android-studio android-fragments android-fragmentactivity


【解决方案1】:

您可能希望使用从片段到第一个活动的 startActivity,然后从第一个活动到第二个活动的 startActivityForResult。当您从 secondactivity 获得结果时,您在 firstactivity 的 onActivityResultResult 上处理它,并使用意图从 firstactivity 转到片段,并将从第二个活动获得的值传递给 firstactivity 的片段。确保正确处理 backstack。

【讨论】:

    【解决方案2】:

    首先取消注释

    startActivityForResult(intent, MY_REQUEST_CODE_TWO);
    

    来自FirstActivity的onItemClick方法和评论

    //startActivity(intent);
    

    将此onActivityResult 添加到FirstActivity

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == MY_REQUEST_CODE_TWO) {
            Intent intent = new Intent();
            intent.putExtra("name", data.getExtras().getString("name"));
            intent.putExtra("id", data.getExtras().getString("id"));
            setResult(Activity.RESULT_OK, intent);
            finish();
        }
    }
    

    说明:

    SecondActivity 的结果将传递给FirstActivity,FirstActivity 的结果将传递给FragmentActivity

    【讨论】:

      【解决方案3】:

      通过调用将活动结果值从活动传递到片段 ->

      @Override
      public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if (resultCode == RESULT_OK) {
                  for (Fragment fragment : getSupportFragmentManager().getFragments()) {
                      if (fragment != null) {
                          fragment.onActivityResult(requestCode, resultCode, data);
                      }
                  }
          }
      }
      

      然后在片段中调用活动结果

       @Override
      public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          Log.e("onF**kingHere*frg", String.valueOf(requestCode) + " " + resultCode);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-01
        • 2016-05-29
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 2019-12-05
        • 1970-01-01
        • 2020-11-15
        相关资源
        最近更新 更多