Why in ViewHolder pattern should the ViewHolder class be static?

前端 未结 2 880
感动是毒
感动是毒 2021-02-07 00:46

I am just trying to have a better understanding of the following pattern I regularly use to optimize ListView

My readings only pointed me to the fact that a

相关标签:
2条回答
  • 2021-02-07 01:16

    My opinion is that it is better to have the ViewHolder class static as it won't leak the Adapter.

    If the adapter retains some heavy Collections or even Views (depends on each particular case), it would be great to keep control of which objects retain the Adapter.

    Having a lot of objects instances of an inner class will have those objects referencing the Adapter, thus retaining it. You should be careful about how the tags are managed (if the views are cleaned/removed automatically there is no problem>).

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

    One benefit of using static inner class, is that the inner class can be accessed from static methods, without having an instance of the outer class.

    If the inner class non-static:

    class MyOuter {
        private int x = 7;
        public void makeInner() {
            MyInner in = new MyInner();
            in.seeOuter();
        }
        class MyInner {
            public void seeOuter() {
                System.out.println("Outer x is " + x);
            }
        }
    }
    
    public static void main(String[] args) {
        MyOuter mo = new MyOuter();
        MyOuter.MyInner inner = mo.new MyInner();
        inner.seeOuter();
    }
    

    If the inner class is static:

    class BigOuter {
        static class Nest {void go() { System.out.println("hi"); } }
    }
    
    class Broom {
        static class B2 {void goB2() { System.out.println("hi 2"); } }
        public static void main(String[] args) {
            BigOuter.Nest n = new BigOuter.Nest();
            n.go();
            B2 b2 = new B2();
            b2.goB2();
        }
    }
    
    0 讨论(0)
提交回复
热议问题