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