我正在尝试监听 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());
}
}
除了它不起作用之外,该代码有点味道,因为您将
MyBottomSheetDialogFragment
与创建它的对象耦合。
正确的方法是在
void setOnChooseReasonListener(OnChooseReasonListener listener)
上有一个方法 MyBottomSheetDialogFragment
并在创建实例时调用它。
myBottomSheetDialogFragment.setOnChooseReasonListener(this);
您可以使用界面来解决此问题
第一 创建一个接口类
interface CustomInterfaceClass {
public void callbackMethod(String date);
}
第二, 在Activity或fragment中初始化接口类 正如我在片段类中使用的那样
//interface for callback
private CustomInterface callback;
第三,确保您已在onCreateView或OnCreate方法中初始化了callback接口对象。
//如果您在初始化时遇到错误,例如 this 关键字 没有分配给回调方法意味着你没有实现 接口fragmentAclass。
callback=this;
第四, 不要忘记在 FragmentAClass 中实现重写方法
@Override
public void callbackMethod(String date) {
Toast.makeText(getContext(), "Yes"+date, Toast.LENGTH_SHORT).show();
}
第五, 现在移至 BottomSheetDialogFragment 或 FragmentBclass
添加回调方法构造函数,例如这样
private CustomInterface callback;
public Disconnect_fragment( CustomInterface callback) {
this.callback=callback;
}
public Disconnect_fragment( ) {
}
最后 现在您可以使用此方法传递值并将在FragmentAclass
中接收callback.callbackMethod("your passing value");