2013-07-01 67 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构造函数中。它也更快,因为它不依赖反射来调用该方法。