0

我有一个LinearLayout

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

以及PronounceView扩展LinearLayout和扩展上述布局的 a。PronunceView在包装中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();
    }

我了解到,在 XML 布局 bur 中的声明不会调用pronounce_onClickin方法,而是会在 in 中工作。PronounceViewandroid:onClicksetOnClickListenerPronounceView

另外,我了解到声明可以触发( )android:onClick包中的任何适当方法,但不能触发(例如:)。PronounceViewcom.company.sample.textcom.company.sample.sound

我理解正确吗?任何人都可以告诉我这种探测机制的原因或某种限制吗?

4

1 回答 1

1

那是因为android:onClick属性试图在视图的上下文中调用该方法,而不是在视图本身或它的父级上 - 检查引用

在您的情况下,您最好OnClickListener在代码中设置 ImageButton,PronounceView例如在构造函数中。它也更快,因为它不依赖反射来调用该方法。

于 2013-07-01T14:04:00.180 回答