国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 自定義View的構造函數詳細介紹

2019-12-12 04:15:34
字體:
來源:轉載
供稿:網友

 Android自定義View的構造函數

自定義View是Android中一個常見的需求,每個自定義的View都需要實現三個基本的構造函數,而這三個構造函數又有兩種常見的寫法。

第一種

每個構造函數分別調用基類的構造函數,再調用一個公共的初始化方法做額外初始化。

public class MyView extends ListView {  public MyView(Context context) {    super(context);    sharedConstructor();  }  public MyView(Context context, AttributeSet attrs) {    super(context, attrs);    sharedConstructor();  }  public MyView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    sharedConstructor();  }    private void sharedConstructor() {    // Do some initialize work.  }}

第二種

級聯式調用,每一個構造函數調用比它多一個參數的構造函數,最后一個構造函數調用基類的構造函數,最后在做一些額外的初始化工作。

public class MyView extends ListView {  public MyView(Context context) {    this(context, null);  }  public MyView(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }  public MyView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);        // Other initialize work.  }}

那么問題來了,我們該使用哪一種方式呢?

結論是:最好使用第一種,因為第二種方法在某些情況下會有問題,比如你自定義的View繼承自ListView或者TextView的時候,ListView或者TextView內部的構造函數會有一個默認的defStyle, 第二種方法調用時defStyle會傳入0,這將覆蓋基類中默認的defStyle,進而導致一系列問題。以ListView為例,看看它的構造函數。

public ListView(Context context) {    this(context, null);  }  public ListView(Context context, AttributeSet attrs) {    this(context, attrs, com.android.internal.R.attr.listViewStyle);  }  public ListView(Context context, AttributeSet attrs, int defStyleAttr) {    this(context, attrs, defStyleAttr, 0);  }  public ListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {    super(context, attrs, defStyleAttr, defStyleRes);    // Other works.  }

可以看到ListView的第二個構造函數代碼中傳入了一個com.android.internal.R.attr.listViewStyle,使用第二種方法(級聯式)調用時,我們傳入的是0,將會覆蓋這個默認值。但是第一種方法中調用了super(context, attrs); 進而調用了基類的 this(context, attrs, com.android.internal.R.attr.listViewStyle);就不會產生問題。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 马山县| 甘泉县| 淮北市| 四子王旗| 交城县| 周口市| 固始县| 陆丰市| 太湖县| 分宜县| 洪雅县| 开阳县| 上杭县| 罗田县| 玉溪市| 仁化县| 定襄县| 青河县| 霍城县| 福安市| 内丘县| 闸北区| 积石山| 晋江市| 南汇区| 西安市| 大庆市| 英德市| 崇文区| 镇康县| 蒲江县| 海南省| 遵化市| 溧阳市| 海林市| 邻水| 安图县| 安化县| 宝兴县| 榆社县| 资阳市|