首页 > 解决方案 > 为结果启动 BottomSheetFragment

问题描述

我想从 BottomSheetFragment 获得结果。我试图通过getActivity().setResult(Activity.RESULT_OK, null);内部做到这一点

    @Override
public void onDismiss(DialogInterface dialog) {
    getActivity().setResult(Activity.RESULT_OK, null);
    super.onDismiss(dialog);
}

但未调用活动的 onActivityResult 方法。我究竟做错了什么?

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Toast.makeText(this, requestCode, Toast.LENGTH_SHORT).show();
    super.onActivityResult(requestCode, resultCode, data);
}

对话框启动方法

BottomSheetDialogFragment bottomSheetFragment = new BottomSheetDialogFragment();
            Bundle bundle = new Bundle();
            bottomSheetFragment.setArguments(bundle);
            bottomSheetFragment.show(getSupportFragmentManager(), bottomSheetFragment.getTag());

标签: javaandroidandroid-fragmentsandroid-dialogfragmentbottom-sheet

解决方案


onActivityResult()用于从另一个 Activity 获取结果。

更多信息:https ://developer.android.com/training/basics/intents/result

如果你想将一些数据从 Fragment 发送到 Activity,你可以通过定义一个接口或通过将其转换为特定的 Activity 来调用 Activity 中的方法来实现。

class MainActivity extends AppCompatActivity {

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
  YourBottomSheetDialogFragment bottomSheetFragment = new YourBottomSheetDialogFragment();
  Bundle bundle = new Bundle();
  bottomSheetFragment.setArguments(bundle);
  bottomSheetFragment.show(getSupportFragmentManager(), bottomSheetFragment.getTag());
 }

 public void setResultFromFragment(String data) {
  ...
 }
}

/**
* Calling Activity's method from Fragment
*/
class YourBottomSheetDialogFragment extends BottomSheetDialogFragment {

 @Override
 public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ((MainActivity) getActivity()).setResultFromFragment("");
 }
}

推荐阅读