Как получить предыдущий или следующий вид

как я могу получить предыдущее представление (TextView) представления SlideButton и следующее представление представления SlideButton.

Представление SlideButton с идентификатором «remotelight». Я могу получить представление SlideButton с помощью метода findViewById. поэтому после того, как я получу представление SlideButton, как я могу получить предыдущее представление и следующее представление без помощи метода «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>

person explorer    schedule 02.11.2012    source источник


Ответы (3)


Для этого вы можете использовать экземпляр 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);

Вы должны добавить проверки на переполнение и на то, что следующее представление имеет тот тип, который вам действительно нужен.

person CjS    schedule 02.11.2012
comment
спасибо. однако, как я могу получить экземпляр viewGroup? Оба метода принадлежат ViewGroup. Спасибо еще раз! - person explorer; 02.11.2012
comment
Объект TableRow представляет собой ViewGroup. Вы можете получить TableRow с помощью findViewbyId(R.tableRow1) - person CjS; 02.11.2012
comment
Здравствуйте, вы онлайн, спасибо за помощь еще раз! Я изо всех сил стараюсь дождаться вашего ответа. - person explorer; 02.11.2012
comment
en большое спасибо, ха-ха, и я использую ViewGroup vg = (ViewGroup)v.getParent(); получить группу просмотра. - person explorer; 02.11.2012

Я создал две функции, которые используют решение @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;

}
person Rotem    schedule 09.08.2015

Я создал эквивалент в Kotlin Extension:

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
}

person Moises Portillo    schedule 28.06.2020