2014-01-08 12 views
28

はlayoutInflaterを取得する方法があります:Androidでレイアウトインフレータを使用する正しい方法は何ですか?

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

、別の方法がある:

LayoutInflater inflater = LayoutInflater.from(context); 

3つ目は(私が活動していますとき)である:だから

LayoutInflater inflater = getLayoutInflater(); 

それらの違いは何ですか?私は私のアダプタに第三インフレータを送ったとき、私のアプリケーションが働いたこと

は注意してください。しかし、私が文脈を送り、第2の方法でインフレータを作ったとき、それはしませんでした!

+3

あまり違いはありません – Raghunandan

+1

grepcodeでそれらのメソッドを探してください。それらの違いを理解することができます – Blackbelt

+1

審美的には、第1のもの:)そうでなければ、すべて同じです。 – himanshurb

答えて

5

それらの間の差異の多くはありません。ドキュメントとして

は、この文脈でレイアウトリソースを膨張させるためpublic abstract Object getSystemService (String name)

A LayoutInflater言います。

そしてpublic static LayoutInflater from (Context context)

のためには、指定されたコンテキストからLayoutInflaterを取得します。

あなたは唯一の違いは、使用するコンテキストですIs there any difference between getLayoutInflater() and .getSystemService(Context.LAYOUT_INFLATER_SERVICE)

4

このスレッドを確認することができます。あなたがLayoutInflater.fromContext()またはcontext.getSystemService(...)で使用状況が実際の活動であれば、それはActivity.getLayoutInflater()と同等でなければなりません。アプリケーションオブジェクトの場合は、フラグメント、IIRCを含むビューを膨張させる際に問題が発生する可能性があります。

16

あなたの活動の中で

LayoutInflater inflater = (LayoutInflater) context.getSystemService(
     Context.LAYOUT_INFLATER_SERVICE); 

あなたの活動の外での使用

 LayoutInflater inflater = getLayoutInflater(); 

Check this

あなたはAndroidのソースを開く場合は、LayoutInflator.fromメソッドがそうのように見えることがわかります:

/** 
    * Obtains the LayoutInflater from the given context. 
    */ 
    public static LayoutInflater from(Context context) { 
     LayoutInflater LayoutInflater = 
       (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (LayoutInflater == null) { 
      throw new AssertionError("LayoutInflater not found."); 
     } 
     return LayoutInflater; 
    } 

と違い

限りgetLayoutInflater()を呼び出し活性またはウィンドウが存在しないがgetSystemService()を呼び出すのと同じコンテキストを有し、違いはありません。方法 - 活動の方法便利です -

+0

あなたはy dayを作った、私は最後から検索していた5日間、このエラーで運が上がらなかったので、あなたのソリューションはうまく動作します@Shyam Deore –

2

実は私はgetLayoutInflater()があると思います。

ActivityサブクラスContextを記憶しているので、Contextで利用可能なすべてのメソッドはActivityクラスでも利用できます。

は内部LayoutInflater.fromContext()またはcontext.getSystemService()への呼び出しがあるだろうので、私は、私は、システムサービスへの呼び出しを作っていますことを明確にするだけでなく、不要なメソッド呼び出しを避けるためにcontext.getSystemServiceの両方に固執するでしょう。

関連する問題