2016-04-12 29 views
0

如何在屬性中接受方法作爲值? 像onclick屬性的查看:Android:<declare-styleable>方法屬性

<Button android:onClick="onClickMethod"/> 

如何定義接受的方法自定義屬性?

我知道我們在資源中使用<declare-styleable>,但我們如何讓它接受方法?

回答

2

Android使用反射來查找方法的名稱並調用它。你可以看到開始行4209 https://github.com/android/platform_frameworks_base/blob/master/core%2Fjava%2Fandroid%2Fview%2FView.java#L4209

   case R.styleable.View_onClick: 
       if (context.isRestricted()) { 
        throw new IllegalStateException("The android:onClick attribute cannot " 
          + "be used within a restricted context"); 
       } 

       final String handlerName = a.getString(attr); 
       if (handlerName != null) { 
        setOnClickListener(new DeclaredOnClickListener(this, handlerName)); 
       } 
       break; 

源一個例子,如果方法名不爲空,它會創建一個新的DeclareOnClickListener()類與方法的名稱對其進行初始化。

DeclareOnClickListener()類在線路4435 https://github.com/android/platform_frameworks_base/blob/master/core%2Fjava%2Fandroid%2Fview%2FView.java#L4435

+0

我看到所定義。但是android的格式是什麼:onClick?如果我嘗試爲我的attr使用引用格式,則ide抱怨符號無法解析:'app:myOnClick =「onClickMethod」' – Alterecho

+1

您的myOnClick聲明應該如下所示:'。你使用一個字符串,因爲這是用來查找方法名稱的。 –

+0

它的工作原理!但他們如何自動完成onClick的方法? – Alterecho