【问题标题】:For-Each Loop On A Layout's Child ViewsFor-Each 循环:将布局转换为视图数组?
【发布时间】:2022-01-02 09:49:34
【问题描述】:

如题所问,

假设我有一个layout(如RelativelayoutLinearLayout 等)和大量Views

  • 这里的情况是,我想使用for-each 方法对所有人做同样的事情。

  • 问题是,您只能在 iterate 符合 array 条件时使用 for-each 方法。


附:我知道你可以这样做:

for(int i=0;i<layout.getChildCount();i++){
    View v=layout.getChildAt(i);
    v.doSomething(parameters);
}
  • 我只需要知道是否有其他方法可以使用 for-each 方法,这样我就可以节省时间,而不是在我开发的每个应用程序上一遍又一遍地输入。

  • 我仍然会接受答案,所以不要害羞!

【问题讨论】:

  • 看起来你的问题是关于减少代码的。您可能不想切换到 Kotlin,但您可以在那里执行类似 (view as? ViewGroup)?.children?.forEach { it.doSomething(parameters) } 的操作。从 N 开始,Java 也有流/lambda。请参阅:academy.realm.io/posts/…
  • @Michael 猜得好,我不想切换到 Kotlin,我会查看那个链接。(目前正在阅读)

标签: java android android-layout foreach android-view


【解决方案1】:

为什么不创建一个辅助方法,例如:

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();
    }
});

或使用 lambda ViewGroupHelper.forEach(layout, view -&gt; view.doSomething());

【讨论】:

  • 我非常喜欢这个想法,可以用于我这里的所有类文件,可以剪切很多代码行,而且它不是特定于布局的,也不是特定于小部件的。谢谢!
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
相关资源
最近更新 更多