java - 为结果启动 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());
解决方案
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("");
}
}
推荐阅读
- spring-integration - 对 JobLaunchRequest 的误解
- spring - 替换 Kotlin 中的长注释
- git - 将 git 添加到 yocto 图像
- python - 如果Django中有多个相等的对象,如何只显示一个对象?
- javascript - 重新加载通过 XMTHTTPRequest 对象发布数据的页面
- python - Python:Python 中文本列表的 URL 列表(Excel)
- node.js - 没有蓝鸟的 Promise.try
- java - Selenium WebElement Extend - 添加属性父框架
- c++ - 将类复制到现有类 C++
- java - AmazonS3 SDK:列出对象时拒绝访问