Запустите BottomSheetFragment для результата - PullRequest
0 голосов
/ 28 мая 2019

Я хочу получить результаты от 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());

Ответы [ 2 ]

1 голос
/ 28 мая 2019

onActivityResult() используется для получения результата от другого занятия.

Подробнее об этом: https://developer.android.com/training/basics/intents/result

Если вы хотите отправить некоторые данные из Fragment в 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("");
 }
}
0 голосов
/ 28 мая 2019

Я решил реализовать интерфейс в соответствии с предложением DEVV911

interface OnFinishedListener {

        void onFinished(ArrayList<TestCard> acceptList, ArrayList<TestCard> rejectList);

        void onFailure(Throwable t);
    }

добавить его в метод построения диалога

private TestActivityContract.OnFinishedListener onFinishedListener;

BottomSheetFragment(TestActivityContract.OnFinishedListener onFinishedListener) {
    this.onFinishedListener = onFinishedListener;
}

и вызвать метод onFinishedв onDismiss

    @Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    onFinishedListener.onFinished(acceptList, rejectList);
}
...