【问题标题】:How to get the previous or next view如何获得上一个或下一个视图
【发布时间】:2012-10-23 02:06:45
【问题描述】:

如何获取 SlideButton 视图的上一个视图(TextView)和 SlideButton 视图的下一个视图。

ID 为“remotelight”的 SlideButton 视图。我可以使用“findViewById”方法获得 SlideButton 视图。 所以在我得到 SlideButton View 之后,如何在没有“findViewById”方法的帮助下获取上一个视图和下一个视图。

非常感谢。

下面是布局xml的一部分:

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

    <com.ivn.SlideButton
        android:id="@+id/remotelight"
        android:layout_width="100dp"
        android:layout_height="50dp" />


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="" />

</TableRow>

【问题讨论】:

    标签: android view find next


    【解决方案1】:

    您可以使用ViewGroup 实例作为小部件的容器来执行此操作。

    请参阅getChildAt(int)indexOfChild(View)

    所以getChildAt(indexOfChild(v)+1) 将为您提供下一个视图。

    类似

     ViewGroup container = (ViewGroup) findViewbyID(R.tableRow1);
     View slideBtn = findViewbyID(R.remoteLight);
     View nextView = container.getChildAt(container.indexOfChild(slideBtn)+1);
    

    您应该添加对溢出的检查以及下一个视图是否属于您实际上想要的类型。

    【讨论】:

    • 非常感谢。但是,如何获取 viewGroup 实例?这两种方法都归 ViewGroup 所有。再次感谢!
    • TableRow 对象是一个 ViewGroup。您可以通过findViewbyId(R.tableRow1) 获取 TableRow
    • 您好,您在线吗,再次感谢您的帮助!我尽力等待您的回复。
    • en 非常感谢哈哈,我使用“ViewGroup vg = (ViewGroup)v.getParent();”获取 ViewGroup。
    【解决方案2】:

    我创建了两个函数来使用@CjS 解决方案:

    /**
     * @param view
     */
    public static View prev(View view) {
    
        ViewGroup container = (ViewGroup) view.getParent();
    
        int indexOfChild = container.indexOfChild(view);
    
        if ((indexOfChild - 1) >= 0) {
    
            return container.getChildAt(indexOfChild - 1);
    
        }
    
        return null;
    
    }
    
    /**
     * @param view
     */
    public static View next(View view) {
    
        ViewGroup container = (ViewGroup) view.getParent();
    
        int indexOfChild = container.indexOfChild(view);
    
        if (container.getChildCount() > (indexOfChild + 1)) {
    
            return container.getChildAt(indexOfChild + 1);
    
        }
    
        return null;
    
    }
    

    【讨论】:

      【解决方案3】:

      我在 Kotlin 扩展中创建了一个等价物:

      fun View.getPreviousView() : View? {
          val container : ViewGroup = this.parent as ViewGroup
          val indexOfChild = container.indexOfChild( this )
          return if (indexOfChild - 1 >= 0) {
              container.getChildAt(indexOfChild - 1)
          } else null
      }
      
      fun View.getNextView() : View?{
          val container : ViewGroup = this.parent as ViewGroup
          val indexOfChild = container.indexOfChild( this )
          return if (container.childCount > indexOfChild + 1) {
              container.getChildAt(indexOfChild + 1)
          } else null
      }
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 2018-02-05
        相关资源
        最近更新 更多