2013-07-01 79 views
0

探測我有一個LinearLayoutXML佈局申報的Android

<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> 
     <ImageButton android:id="@+id/pronounce" 
        style="@style/pronounce" 
        android:onClick="pronounce_onClick"/> 
</LinearLayout> 

並延伸LinearLayout和膨脹上述佈局的PronounceViewPronunceView在包com.company.sample.text

通貨膨脹:

LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    inflater.inflate(R.layout.pronouncelayout, this); 

pronounce_onClick

public void pronounce_onClick(View v) { 
     pronounce(); 
    } 

我瞭解到,該方法pronounce_onClickPronounceView不會通過XML佈局聲明稱爲鑽而是將工作通過setOnClickListenerPronounceView

而且,我已經瞭解到,聲明能火是在包裝的PronounceViewcom.company.sample.text)的任何適當的方法,但不出來的是(作爲一個例子:com.company.sample.sound)。

我理解正確嗎?任何人都可以告訴我這種探測機制的原因或某種限制嗎?

+0

你的意思是說你的發音_onClick方法沒有被按鈕點擊調用。你可以請添加它的代碼和你如何宣佈發言視圖 –

+0

正如我所說,如果聲明在xml佈局中,發音不會觸發,但它的工作原理,如果由setOnClickListener定義通過代碼 –

+0

確定。已經使用了在xml佈局中聲明的函數。請添加布局如何通過發音視圖和代碼爲您的發音_onClick方法的代碼 –

回答

1

這是因爲屬性試圖在視圖的上下文中調用該方法,而不是視圖本身或其父項 - 請檢查reference

對於你的情況,你最好在代碼中爲ImageButton設置OnClickListener,例如在PronounceView構造函數中。它也更快,因爲它不依賴反射來調用該方法。