真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

addView遇到的坑及其解決-創(chuàng)新互聯(lián)

 代碼中給容器動態(tài)添加子View時遇到一些問題,當時還是糾結(jié)許久的。擅總結(jié)者無敵,寫下此篇總結(jié),問題比較的簡單,希望對新手有所幫助。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比榆樹網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式榆樹網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務覆蓋榆樹地區(qū)。費用合理售后完善,10年實體公司更值得信賴。

使用場景:

情況一:

View view = View.inflate(this, R.layout.item_contact,null);

view.getLayoutParams() == null

情況二:

View view =getLayoutInflater().inflate(R.layout.item_contact, null, false);

view.getLayoutParams() == null

情況三:

View view =getLayoutInflater().inflate(R.layout.item_contact, mContainer, false);

或者:View view =LayoutInflater.from(this).inflate(R.layout.item_contact, mContainer, false);

view.getLayoutParams() != null

//添加到指定父容器

mContainer.addView(view);

View.inflate(this, R.layout.item_contact, mContainer);

作用:創(chuàng)建一個指定布局的View對象,并加入到mContainer的父容器中。

getLayoutInflater().inflate(R.layout.item_contact,mContainer, true);

作用:創(chuàng)建一個指定布局的View對象,并加入到mContainer的父容器中。

View.inflate(this,resource, null);

這種方式創(chuàng)建的View對象沒有LayoutParams。沒指定父容器(null),也就是寬高參數(shù)是空的。

此時addView方法中會調(diào)用generateDefaultLayoutParams()生成默認的寬高參數(shù):

就是:new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

如果你的原本布局寬高不是wrap_content,wrap_content,那么就有問題了。

LayoutInflater.inflate方法

LayoutInflater.inflate(int resource, ViewGroup root,boolean attachToRoot)

resource:資源文件id

root:父容器對象

attachToRoot:是否添加到父容器中

備注:

attachToRoot == true;root會作為創(chuàng)建的View對象的父容器

attachToRoot == false;root會為創(chuàng)建的View對象提供LayoutParams參數(shù)

對于新手而言,問題可能在于:

View view = View.inflate(this, R.layout.item_contact,null);

mContainer.addView(view);添加到mContainer父容器中

問題在于:此時的view是沒有LayoutParams的,需要:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.WRAP_CONTENT,

LinearLayout.LayoutParams.MATCH_PARENT);

需要使用:mContainer.addView(view, params);這樣才能正確體現(xiàn)View布局的寬高參數(shù)。

上述代碼相當于如下:

View.inflate(this, R.layout.item_contact, mContainer);//一行代碼搞定

而同一個View對象,不能同時有兩個父容器,此時就無需再調(diào)用addView(view);添加了。

如果不需要對View對象進行操作,還免去創(chuàng)建引用變量的資源消耗。(這里有坑)

另外一個類似方法:

getLayoutInflater().inflate(int resource, ViewGrouproot, boolean attachToRoot)

事實上,從源碼可見:

View.inflate(this, resource, null);//實現(xiàn)原理可歸納為:

LayoutInflater.from(this).inflate(resource, root, root!= null);

總結(jié):為容器添加子View的方式:

方式一://方便重新指定LayoutParams

View view = View.inflate(this, R.layout.item_contact,null);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(...);//重新指定LayoutParams。

mContainer.addView(view, params);

方式二(同一):

View view =LayoutInflater.from(this).inflate(R.layout.item_contact, mContainer, false);

mContainer.addView(view);

方式三://適合于使用布局中指定的LayoutParams

View.inflate(this, R.layout.item_contact, mContainer);

方式四(同四):

LayoutInflater.from(this).inflate(R.layout.item_contact,mContainer, true);

備注:顯然,方式三、四使用更簡潔,方式一、二則適用于布局重用于不適合布局中指定的LayoutParams的情況。

==================================================================================================

坑坑坑坑

LayoutInflater的API文檔:

View inflate (int resource, ViewGroup root)

The root View of the inflated hierarchy. If root was supplied, this is the root View; otherwise it is the root of the inflated XML file.

View inflate (int resource, ViewGroup root, boolean attachToRoot)

The root View of the inflated hierarchy. If root was supplied and attachToRoot is true, this is root; otherwise it is the root of the inflated XML file.

例如:

View view = View.inflate(this, resoutceId, mContainer);

如果傳入root不為空,

那么此時view表示mContainer和新創(chuàng)建出來的對象結(jié)合后的root View,這里就是父容器mContainer。

當你需要對每個新創(chuàng)建的View對象進行操作時,如統(tǒng)一點擊事件等,則不能傳入父容器。

View view = View.inflate(this,resoutceId, null);

mContainer.addView(view);

如果傳入root為空

那么此時view表示新創(chuàng)建出來的View對象,就是resoutceId指定的布局的根元素。

例如:resoutceId根元素是TextView,則view是TextView對象

另外:

LayoutInflater.from(this).inflate(resoutceId, mContainer));

//默認attach到mContainer,返回mContainer

LayoutInflater.from(this).inflate(resoutceId, mContainer, true));

//attach到mContainer,返回mContainer

LayoutInflater.from(this).inflate(resoutceId, mContainer, false));

//沒有attach到mContainer,返回resoutceId的根元素

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。


網(wǎng)站標題:addView遇到的坑及其解決-創(chuàng)新互聯(lián)
文章分享:http://weahome.cn/article/coeeej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部