gpt4 book ai didi

java - DialogFragment 附加到 MainActivity 而不是父 Fragment Activity

转载 作者:行者123 更新时间:2023-12-01 12:00:30 26 4
gpt4 key购买 nike

我从 Fragment 创建了一个 DialogFragment,并且在该 fragment 中实现了一个监听器,问题是 DialogFragment 附加到 MainActivity 而不是 Parent Frame。

所以我在 DialogFragment 中有这段代码,它是从 Fragment 调用的

// Override the Fragment.onAttach() method to instantiate the
// SensorRateChangeListener
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the SensorRateChangeListener so we can send events to
// the host
mListener = (SensorRateChangeListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement SensorRateChangeListener");
}
}

这是 Fragment 中调用对话框的代码

FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = SensorRateChangeDlg.newInstance(mStackLevel);
newFragment.show(ft, "rate");

当我运行应用程序并创建 DialogFragment 时,它会因错误而崩溃......MainActivity 应该实现 SensorRateChangeListener,但它是在调用 Fragment 中实现的。

Error: MainActivity@424085b8 must implement SensorRateChangeListener

我无法在MainActivity中实现SensorRateChangeListener接口(interface),因为它有很多与Fragment相关的其他功能,这会让事情变得更加复杂。

最佳答案

您的应用程序在此处崩溃

 mListener = (SensorRateChangeListener) activity;

因为它期望您的主要 Activity 如下所示:

public class MainAcivity extends Activity implements SensorRateChangeListener{

由于您在另一个 fragment 中实现了 SensorRateChangeListener 接口(interface),因此它崩溃了。因此,只需在 MainActivity 中实现 SensorRateChangeListener 接口(interface)或仅实现如下方法:

public void setOnSensorRateChangeListener(SensorRateChangeListener listener){
mListener=listener;
}

编辑

以及实现SensorRateChangeListener接口(interface)的 Activity/fragment :

newFragment.setOnSensorRateChangeListener(this);

然后在调用之前检查监听器是否不为空:

if(mListener!=null)

关于java - DialogFragment 附加到 MainActivity 而不是父 Fragment Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com