[Android]inflate方法與 findViewById 方法區別 | LayoutInflater的inflate函數用法詳解


在實際開發中LayoutInflater這個類還是非常有用的,它的作用類似於findViewById()。不同點是LayoutInflater是用來找res/layout/下的xml布局文件,並且實例化;而findViewById()是找xml布局文件下的具體widget控件(如Button、TextView等)。

具體作用:

1、對於一個沒有被載入或者想要動態載入的界面,都需要使用LayoutInflater.inflate()來載入;

2、對於一個已經載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。

 

LayoutInflater作用是將layoutxml布局文件實例化為View類對象。

獲取LayoutInflater的方法有如下三種:

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.main, null);
 
LayoutInflater inflater = LayoutInflater.from(context); (該方法實質就是第一種方法,可參考源代碼)
View layout = inflater.inflate(R.layout.main, null);
 
LayoutInflater inflater = getLayoutInflater();(在Activity中可以使用,實際上是View子類下window的一個函數)
View layout = inflater.inflate(R.layout.main, null);

 

注意:

·inflate方法與 findViewById 方法不同;

·inflater 是用來找 res/layout下的 xml 布局文件,並且實例化;

·findViewById() 是找具體 xml 布局文件中的具體 widget 控件(如:Button、TextView 等)。

 

---------------------------------------------------------------------------

setContentViewinflate的區別

一直有點糾結setContentViewinflate的區別找了一些資料。寫了個小程序看了下:

public class MyInflate extends Activity{
    private TextView tv;
    public void OnCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        //tv = (TextView) findViewById(R.id.tv);
 
        LayoutInflater inflate = LayoutInflater.from(this);
        View view = inflate.inflate(R.layout.main,null);
        setContentView(view);
    }
}

 

上述注釋掉的代碼和沒有注釋掉的代碼兩種情況是相同的。

區別:
setContentView()
一旦調用, layout就會立刻顯示UI;而inflate只會把Layout形成一個以view類實現成的對象,有需要時再用setContentView(view)顯示出來。一般在activity中通過setContentView()將界面顯示出來,但是如果在非activity中如何對控件布局設置操作了,這就需要LayoutInflater動態加載。

public View inflate(int Resourece,ViewGroup root)
作用:填充一個新的視圖層次結構從指定的
XML資源文件中
reSource
ViewlayoutID
root
 生成的層次結構的根視圖
return 
填充的層次結構的根視圖。如果參數root提供了,那么root就是根視圖;否則填充的XML文件的根就是根視圖。

其余幾個重載的inflate函數類似。

 

參考:

1.  http://www.open-open.com/lib/view/open1328837587484.html

2.  http://www.cnblogs.com/shitianzeng/articles/2323427.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM