LayoutInflaterを取得する方法があります。
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
別の方法は次のとおりです。
LayoutInflater inflater = LayoutInflater.from(context);
3番目(アクティビティにいるとき)は次のとおりです。
LayoutInflater inflater = getLayoutInflater();
それで、それらの違いは何ですか?
3番目のインフレータをアダプタに送信したときに、アプリケーションが機能したことに注意してください。しかし、2番目の方法でコンテキストを送信し、インフレータを作成したときは、そうではありませんでした!
それらの間に大きな違いはありません。
文書によると public abstract Object getSystemService(String name)
このコンテキストでレイアウトリソースを拡張するためのLayoutInflater。
そして (Context context)からのpublic static LayoutInflater
指定されたコンテキストからLayoutInflaterを取得します。
このスレッドを確認できます getLayoutInflater()と.getSystemService(Context.LAYOUT_INFLATER_SERVICE)に違いはありますか
アクティビティ以外で使用する
_ 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()
を呼び出すコンテキストと同じコンテキストを持っている限り、違いはありません。
唯一の違いは、使用するコンテキストです。 LayoutInflater.fromContext()
またはcontext.getSystemService(...)
で使用するコンテキストが実際にアクティビティである場合、それはActivity.getLayoutInflater()
と同等でなければなりません。アプリケーションオブジェクトの場合、フラグメントを含むビュー、IIRCの膨張に問題がある可能性があります。
実際、私はgetLayoutInflater()
-アクティビティのメソッドは便利-メソッドだと思います。
Activity
サブクラスContext
であるため、Context
内で使用可能なすべてのメソッドはActivity
クラスでも使用できます。
内部的にはLayoutInflater.fromContext()
またはcontext.getSystemService()
の呼び出しがあるため、context.getSystemService
両方とも、不必要なメソッド呼び出しを回避するとともに、システムサービスを呼び出していることを明確にします。