什么是View ...观点?它是如何工作的?

时间:2015-01-01 11:37:20

标签: java android android-layout methods android-transitions

我正在学习以下文章中的过渡:Transitions - ADP

他已经实现了方法toggleVisibility(),如下所示:

 public void onClick(View v) {
        TransitionManager.beginDelayedTransition(mRootView, new Fade());
        toggleVisibility(mRedBox, mGreenBox, mBlueBox, mBlackBox);
    }

    private static void toggleVisibility(View... views) {
        for (View view : views) {
            boolean isVisible = view.getVisibility() == View.VISIBLE;
            view.setVisibility(isVisible ? View.INVISIBLE : View.VISIBLE);
        }

从上面我知道View... views代表方法中的所有view参数。但是,我从未见过这个...运算符。它是什么?这个怎么运作?我google了坚果无法得到任何anser。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

...被称为varags。它允许您将任意数量的视图(0或更多)传递给该方法。

您可以调用它,例如:

toggleVisibility(); // no views
toggleVisibility(view1); // one view
toggleVisibility(view1,view2); // two views
...

它相当于将View[]数组传递给方法。

编写方法调用时,编译器会将传递给该方法调用的参数与所有具有相同名称的方法的agrument列表进行匹配,以便找到最适合调用的方法。零个或多个View实例(所有这些实例必须是方法调用中的最后一个参数)可以匹配方法定义中的单个View...参数(必须是最后一个参数)。在方法内部,您可以将View...变量视为View[]类型的变量(即数组)。

在确定要调用的最合适的重载方法时,varargs参数具有最低优先级。因此,如果重载toggleVisibility(),它将进行编译,并且在没有任何参数的情况下调用toggleVisibility()将调用没有参数的方法。类似地,您可以声明优先于varargs版本的toggleVisibility(View v),但varargs中的要点是为您节省定义多个方法的需要,这些方法具有相同的名称和相同类型的参数,这些参数仅在数量上有所不同相同类型的参数。

答案 1 :(得分:3)

View ... views是一个可变参数。这意味着您可以向其传递任意数量的视图,用逗号分隔,就像它们是单独的参数一样。然后,该函数可以将该参数视图视为一个集合,其中包含在其中传递的所有参数。

答案 2 :(得分:0)

这是varagas,它允许您将零个或多个参数传递给函数。它允许您避免使用函数的重载版本或使用数组输入(常见的解决方法) varagas有2条规则,varagas也称为变量参数

1-每个函数只允许一个变量参数

2-变量参数应该是最后一个参数

void doSomething1(String... values, int x){}给出编译时错误

void doSomething2(String... values, int... vals)给出编译时错误

了解更多信息,请查看Varagas Docs