LayoutInflater的簡單介紹

實際開發中LayoutInflater這個類仍是很是有用的,它的 做用相似於findViewById()。html

不一樣點是LayoutInflater是用來找res/layout/下的xml佈局文件,而且實例化;佈局

而 findViewById()是找xml佈局文件下的具體widget控件(如Button、TextView等)。this

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

二、對於一個已經載入的界面,就能夠使用Activiyt.findViewById()方法來得到其中的界面元素。url


LayoutInflater 是一個抽象類,在文檔中以下聲明:spa

public abstract class LayoutInflater extends Object  code

 

得到 LayoutInflater 實例的三種方式xml

1. LayoutInflater inflater = getLayoutInflater();  //調用Activity的getLayoutInflater()htm

2. LayoutInflater localinflater =  (LayoutInflater)context.getSystemServiceblog

                                                 (Context.LAYOUT_INFLATER_SERVICE);開發

3. LayoutInflater inflater = LayoutInflater.from(context);   

 

其實,這三種方式本質是相同的,從源碼中能夠看出:

getLayoutInflater():

Activity 的 getLayoutInflater() 方法是調用 PhoneWindow 的getLayoutInflater()方法,看一下該源代碼:

1 public PhoneWindow(Context context) { 2         super(context); 3         mLayoutInflater = LayoutInflater.from(context); 4 }

能夠看出它實際上是調用 LayoutInflater.from(context)。

LayoutInflater.from(context):

複製代碼
1 public static LayoutInflater from(Context context) { 2     LayoutInflater LayoutInflater =   3  (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 4     if (LayoutInflater == null) { 5         throw new AssertionError("LayoutInflater not found."); 6  } 7     return LayoutInflater; 8 }
複製代碼

能夠看出它其實調用 context.getSystemService()。

 

結論:因此這三種方式最終本質是都是調用的Context.getSystemService()。

 

下面來看一個例子

LayoutInflater factory = LayoutInflater.from(LogActivity.this);

final View textEntryView = factory.inflate(
R.layout.alert_dialog_seturl, null);
EditText eturl = (EditText) textEntryView.findViewById(R.id.seturl);
eturl.setText(JiWuWuZiAPP.URL);
相關文章
相關標籤/搜索