今天使用github上Yalantis的Context-menu的庫(kù)時(shí)榆综,想到自己要在多個(gè)fragment里使用理茎,于是就封裝了一下获诈,用一個(gè)類來(lái)實(shí)現(xiàn)其中的OnMenuItemClickListener(處理每個(gè)item點(diǎn)擊事件的回調(diào))救斑,但是卻發(fā)現(xiàn)Log日志中拋出了ClassCast的異常:
MainActivity should implements OnMenuItemClickListener
當(dāng)時(shí)整個(gè)人都不好了换淆,因?yàn)閺臎](méi)遇到這種問(wèn)題哗总,原來(lái)一直以為什么類都可以去實(shí)現(xiàn),難道在android中還有特殊的類必須要由activity來(lái)實(shí)現(xiàn)倍试?是因?yàn)槲覍?duì)java的繼承實(shí)現(xiàn)機(jī)制理解不夠讯屈?
后來(lái)當(dāng)我查看源代碼時(shí)才發(fā)現(xiàn),這個(gè)異常是作者寫的县习,這個(gè)OnMenuItemClickListener會(huì)在一個(gè)ContextMenuDialogFragment里與活動(dòng)綁定是調(diào)用
public void onAttach(Activity activity) {
? ? super.onAttach(activity);
? ? try {
? ? ? ? mItemClickListener = (OnMenuItemClickListener) activity;
? ? } catch (ClassCastException e) {
? ? ? ? Log.e(TAG, activity.getClass().getSimpleName() +
? ? ? ? should implement " + OnMenuItemClickListener.class.getSimpleName());
}
我靠涮母!>==< 還可以這樣!T暝浮叛本!
不過(guò)我get了新知識(shí),原來(lái)也有一次我一個(gè)類繼承了另外兩個(gè)類彤钟,而我在某個(gè)地方需要同時(shí)用到這
兩個(gè)類的實(shí)例来候,當(dāng)時(shí)的做法是在傳參是 : method(this, this, ...)
現(xiàn)在看來(lái)只需要這樣調(diào)用就好了,傳一個(gè)參再來(lái)強(qiáng)制轉(zhuǎn)型逸雹。(雖然這樣做并不知道除了好看有什么用营搅,求解)