web-dev-qa-db-ja.com

Androidでlayoutinflaterを取得する正しい方法は何ですか?

LayoutInflaterを取得する方法があります。

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

別の方法は次のとおりです。

LayoutInflater inflater = LayoutInflater.from(context);

3番目(アクティビティにいるとき)は次のとおりです。

LayoutInflater inflater = getLayoutInflater();

それで、それらの違いは何ですか?

3番目のインフレータをアダプタに送信したときに、アプリケーションが機能したことに注意してください。しかし、2番目の方法でコンテキストを送信し、インフレータを作成したときは、そうではありませんでした!

30
Hamzeh Soboh

それらの間に大きな違いはありません。

文書によると public abstract Object getSystemService(String name)

このコンテキストでレイアウトリソースを拡張するためのLayoutInflater。

そして (Context context)からのpublic static LayoutInflater

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

このスレッドを確認できます getLayoutInflater()と.getSystemService(Context.LAYOUT_INFLATER_SERVICE)に違いはありますか

6
user3110424

アクティビティ以外で使用する

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

あなたの活動の中

_     LayoutInflater inflater = getLayoutInflater();
_

チェックしてください

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()を呼び出すコンテキストと同じコンテキストを持っている限り、違いはありません。

18
sachin10

唯一の違いは、使用するコンテキストです。 LayoutInflater.fromContext()またはcontext.getSystemService(...)で使用するコンテキストが実際にアクティビティである場合、それはActivity.getLayoutInflater()と同等でなければなりません。アプリケーションオブジェクトの場合、フラグメントを含むビュー、IIRCの膨張に問題がある可能性があります。

5
MathewI

実際、私はgetLayoutInflater()-アクティビティのメソッドは便利-メソッドだと思います。

ActivityサブクラスContextであるため、Context内で使用可能なすべてのメソッドはActivityクラスでも使用できます。

内部的にはLayoutInflater.fromContext()またはcontext.getSystemService()の呼び出しがあるため、context.getSystemService両方とも、不必要なメソッド呼び出しを回避するとともに、システムサービスを呼び出していることを明確にします。

3
Peter