DialogFragment 附加到 MainActivity 而不是父片段 activity
DialogFragment attaches to MainActivity instead of parent fragment activity
我从 Fragment 创建了一个 DialogFragment,并且在该 Fragment 中实现了一个侦听器,问题是 DialogFragment 附加到 MainActivity 而不是父框架。
所以我在从片段调用的 DialogFragment 中有这段代码
// 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 接口,因为它还有很多其他与Fragment 相关的功能,这会使事情变得更复杂。
你的应用在这里崩溃
mListener = (SensorRateChangeListener) activity;
因为它期望您的 Main Activity 像这样:
public class MainAcivity extends Activity implements SensorRateChangeListener{
由于您在另一个片段中实现了 SensorRateChangeListener 接口,它崩溃了。
所以只需在 MainActivity 中实现 SensorRateChangeListener 接口,或者只实现这样的方法:
public void setOnSensorRateChangeListener(SensorRateChangeListener listener){
mListener=listener;
}
编辑
和实现 SensorRateChangeListener 接口的 activity/fragment:
newFragment.setOnSensorRateChangeListener(this);
然后在调用之前检查侦听器是否不为空:
if(mListener!=null)
我从 Fragment 创建了一个 DialogFragment,并且在该 Fragment 中实现了一个侦听器,问题是 DialogFragment 附加到 MainActivity 而不是父框架。
所以我在从片段调用的 DialogFragment 中有这段代码
// 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 接口,因为它还有很多其他与Fragment 相关的功能,这会使事情变得更复杂。
你的应用在这里崩溃
mListener = (SensorRateChangeListener) activity;
因为它期望您的 Main Activity 像这样:
public class MainAcivity extends Activity implements SensorRateChangeListener{
由于您在另一个片段中实现了 SensorRateChangeListener 接口,它崩溃了。 所以只需在 MainActivity 中实现 SensorRateChangeListener 接口,或者只实现这样的方法:
public void setOnSensorRateChangeListener(SensorRateChangeListener listener){
mListener=listener;
}
编辑
和实现 SensorRateChangeListener 接口的 activity/fragment:
newFragment.setOnSensorRateChangeListener(this);
然后在调用之前检查侦听器是否不为空:
if(mListener!=null)