SensorRateChangeListener

SensorRateChangeListener

我从一个片段创建了一个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)

10-06 13:39