为结果启动 BottomSheetFragment
Start BottomSheetFragment for result
我想从 BottomSheetFragment 获取结果。我试图通过 getActivity().setResult(Activity.RESULT_OK, null);
inside
来做到这一点
@Override
public void onDismiss(DialogInterface dialog) {
getActivity().setResult(Activity.RESULT_OK, null);
super.onDismiss(dialog);
}
但未调用 activity 的 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 中的方法来实现,方法是将其转换为特定的 [=19] =].
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("");
}
}
我决定按照 DEVV911
给我的建议实现界面
interface OnFinishedListener {
void onFinished(ArrayList<TestCard> acceptList, ArrayList<TestCard> rejectList);
void onFailure(Throwable t);
}
添加到dialog的构造方法中
private TestActivityContract.OnFinishedListener onFinishedListener;
BottomSheetFragment(TestActivityContract.OnFinishedListener onFinishedListener) {
this.onFinishedListener = onFinishedListener;
}
并调用onDismiss中的onFinished方法
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
onFinishedListener.onFinished(acceptList, rejectList);
}
我想从 BottomSheetFragment 获取结果。我试图通过 getActivity().setResult(Activity.RESULT_OK, null);
inside
@Override
public void onDismiss(DialogInterface dialog) {
getActivity().setResult(Activity.RESULT_OK, null);
super.onDismiss(dialog);
}
但未调用 activity 的 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 中的方法来实现,方法是将其转换为特定的 [=19] =].
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("");
}
}
我决定按照 DEVV911
给我的建议实现界面interface OnFinishedListener {
void onFinished(ArrayList<TestCard> acceptList, ArrayList<TestCard> rejectList);
void onFailure(Throwable t);
}
添加到dialog的构造方法中
private TestActivityContract.OnFinishedListener onFinishedListener;
BottomSheetFragment(TestActivityContract.OnFinishedListener onFinishedListener) {
this.onFinishedListener = onFinishedListener;
}
并调用onDismiss中的onFinished方法
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
onFinishedListener.onFinished(acceptList, rejectList);
}