从BottomSheetDialogFragment传递或监听数据给调用者Fragment

问题描述 投票:0回答:2

我正在尝试监听 BotomSheetDialogFragment 中的数据或将数据传递到 Fragment 中以更改 Fragment 上的某些内容(就像选择器一样)。

我尝试使用 getTargetFragment 实例化侦听器,但出现编译器错误 Found: 'MyFragment', required: 'android.support.v4.app.Fragment' less..

有什么想法还是我采取了错误的方法?

public class MyBottomSheetDialogFragment extends BottomSheetDialogFragment implements View.OnClickListener {


ReportType reportType;

public interface OnChooseReasonListener {
    void onChooseReason(ReportType reportType);
}

OnChooseReasonListener listener;

@Override
public void setupDialog(Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    View contentView = View.inflate(getContext(), R.layout.picker_bottom_sheet_, null);
    dialog.setContentView(contentView);
    CoordinatorLayout.LayoutParams layoutParams =
            (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
    CoordinatorLayout.Behavior behavior = layoutParams.getBehavior();

    //get null here!!!:
    listener = (OnChooseReasonListener)  getParentFragment();// or with getTargetFragment();
  }

  @Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.cool_button:
            this.reportType = ReportType.ME;
            //trying to execute the lisstener on null
            listener.onChooseReason(this.reportType);
            dismiss();
            break;
    }
}}

还有片段:

    public class MyFragment extends Fragment 
  implements View.OnClickListener, 
  MyBottomSheetDialogFragment.OnChooseReasonListener {
//....code here
  public void showPicker() {
        //getting and compiler error Wrong 1st argument type. 
        // picker. setTargetFragment(MyFragment.this , 300);
         picker.show(fm, picker.getTag());
     }
   @Override
    public void onChooseReason(ReportType reportType) {
        //not getting here
        Log(TAG, "You choose something" + reportType.getValue());
    }
}
android android-fragments listener
2个回答
6
投票

除了它不起作用之外,该代码有点味道,因为您将

MyBottomSheetDialogFragment
与创建它的对象耦合。

正确的方法是在

void setOnChooseReasonListener(OnChooseReasonListener listener)
上有一个方法
MyBottomSheetDialogFragment
并在创建实例时调用它。

myBottomSheetDialogFragment.setOnChooseReasonListener(this);

1
投票

您可以使用界面来解决此问题

第一 创建一个接口类

interface CustomInterfaceClass {

    public void callbackMethod(String date);
}

第二,Activityfragment中初始化接口类 正如我在片段类中使用的那样

 //interface for callback
    private CustomInterface callback;

第三,确保您已在onCreateViewOnCreate方法中初始化了callback接口对象。

//如果您在初始化时遇到错误,例如 this 关键字 没有分配给回调方法意味着你没有实现 接口fragmentAclass。

callback=this;

第四, 不要忘记在 FragmentAClass 中实现重写方法

@Override
    public void callbackMethod(String date) {
        Toast.makeText(getContext(), "Yes"+date, Toast.LENGTH_SHORT).show();
    }

第五, 现在移至 BottomSheetDialogFragmentFragmentBclass

添加回调方法构造函数,例如这样

  private CustomInterface callback;

    public Disconnect_fragment( CustomInterface callback) {
        this.callback=callback;
    }
    public Disconnect_fragment( ) {

    }

最后 现在您可以使用此方法传递值并将在FragmentAclass

中接收
callback.callbackMethod("your passing value");
© www.soinside.com 2019 - 2024. All rights reserved.