无法在onAttach中初始化接口对象



我创建了一个接口DataPasserInterface,用于将数据从片段传递到其托管活动。我在onAttach中初始化了接口,如下代码所示,问题是,在运行时,应用程序崩溃,我收到下面发布的logCat错误。

我不知道为什么this.dataPasserObj = (DataPasserInterface) activity;会导致错误?logcat说,接口对象不能cast?!

接口

private DataPasserInterface dataPasserObj;
...
...
...
 public interface DataPasserInterface {
void onTopicsListChosen(ArrayList<String> chosenTopicsList);

}

onAttach:

@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    Log.w(TAG, "@onAttach().");
    this.dataPasserObj = (DataPasserInterface) activity;
    this.designList = new ArrayList<ItemDesign>();
}

logcat

 E/AndroidRuntime(7828): FATAL EXCEPTION: main
 E/AndroidRuntime(7828): Process: com.example.mqtt_designlayout_02, PID: 7828
 E/AndroidRuntime(7828): java.lang.ClassCastException: com.example.mqtt_designlayout_02.SettingsActivity cannot be cast to com.example.mqtt_designlayout_02.DataPasserInterface
 E/AndroidRuntime(7828):    at com.example.mqtt_designlayout_02.Eco_Settings_Frag.onAttach(Eco_Settings_Frag.java:95)

更新

托管片段的活动的onCreate(),此活动实现接口

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.w(TAG, "@onCreate().");
    this.mqttSettingsDB = new MQTT_Settings_DB(this);
    this.sqliteDB = this.mqttSettingsDB.getWritableDatabase();
    if (this.fragList == null) {
        this.fragList = new ArrayList<Fragment>();
        this.fragList.add(new MQTT_Settings_Frag());
        this.fragList.add(new Eco_Settings_Frag());
        this.fragList.add(new Logger_Settings_Frag());
    }
    initviews(R.layout.settings_activity);
    setUpActionBar();
    this.viewPager.setOnPageChangeListener(viewPagerListener);
}

ClassCastException:com.example.mqt_designlayout_02.设置活动

可能没有在SettingsActivity 中实现DataPasserInterface接口

建议在Eco_Settings_Frag类中创建构造函数,用于获取DataPasserInterface接口并初始化其他值:

public Eco_Settings_Frag(Activity activity){
    this.dataPasserObj = (DataPasserInterface) activity;
    this.designList = new ArrayList<ItemDesign>();
}

创建Eco_Settings_Frag类对象时传递SettingsActivity上下文:

 .....
 this.fragList.add(new Eco_Settings_Frag(SettingsActivity.this));
 this.fragList.add(new Logger_Settings_Frag());
 .....

同时在SettingsActivity活动中实现DataPasserInterface接口

最新更新