Home > Software design >  For-Each Loop: convert a layout into a View array?
For-Each Loop: convert a layout into a View array?

Time:01-02

As asked by the title,

Suppposed that I have a layout (like Relativelayout, LinearLayout, etc.) with a ton lot of Views.

  • The case here is that I want to do the very same thing to all of them using a for-each method.

  • The problem is, you can only iterate using the for-each method when it qualifies as an array.


P.S. I know that you can do it like this:

for(int i=0;i<layout.getChildCount();i  ){
    View v=layout.getChildAt(i);
    v.doSomething(parameters);
}
  • I just have to know if there's another way using the for-each method so that I can save time rather than typing that again and again on every app that I develop.

  • I will still be accepting answers, so don't be shy!

CodePudding user response:

Why not create a helper method like:

public final class ViewGroupHelper {

    public static void forEach(@NonNull ViewGroup group,
                               @NonNull Action action) {
        for (int i = 0; i < group.getChildCount(); i  ) {
            final View view = group.getChildAt(i);
            action.apply(view);
        }
    }

    public interface Action {
        void apply(@NonNull View view);
    }

    private ViewGroupHelper() {}
}

...

ViewGroupHelper.forEach(layout, new ViewGroupHelper.Action() {
    @Override
    public void apply(@NonNull View view) {
        view.doSomething();
    }
});

or with lambda ViewGroupHelper.forEach(layout, view -> view.doSomething());

  • Related