What is the correct way to get layout inflater in Android?

前端 未结 4 1394
终归单人心
终归单人心 2021-01-30 21:47

There is a way to get layoutInflater:

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

and

相关标签:
4条回答
  • 2021-01-30 22:06

    There is not much of a difference between them.

    As doc says public abstract Object getSystemService (String name)

    A LayoutInflater for inflating layout resources in this context.

    And for the public static LayoutInflater from (Context context)

    Obtains the LayoutInflater from the given context.

    You can check this thread Is there any difference between getLayoutInflater() and .getSystemService(Context.LAYOUT_INFLATER_SERVICE)

    0 讨论(0)
  • 2021-01-30 22:07

    Actually I think that the getLayoutInflater() - Method of Activity is a convenience - method.

    Remember that Activity subclasses Context, so all of the Methods available within Context are also available in the Activity Class.

    Internally there will be a call to LayoutInflater.fromContext() or context.getSystemService(), so I would stick to context.getSystemService both to avoid the unnecessary method call as well to clarify that I am making a call to a system service.

    0 讨论(0)
  • 2021-01-30 22:08

    use outside of your activity

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

    Within your activity

         LayoutInflater inflater = getLayoutInflater();
    

    Check this

    If you open up the Android source you can see that the LayoutInflator.from method looks like so:

        /**
         * 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;
        }
    

    and there is no difference

    As long as the Activity or Window that calls getLayoutInflater() has the same Context that would call getSystemService(), there is no difference.

    0 讨论(0)
  • 2021-01-30 22:19

    The only difference is the context that you use. If the context that you use with LayoutInflater.fromContext() or context.getSystemService(...) is actually an Activity, it should be equivalent to Activity.getLayoutInflater(). If it's the application object, you might have problems inflating views that contain fragments, IIRC.

    0 讨论(0)
提交回复
热议问题