问题
how can I get the previous view(TextView) of the SlideButton view, and the next view of the SlideButton view.
The SlideButton view with the id "remotelight". I can get the SlideButton view with the method "findViewById". so after I get the SlideButton View, how can I get the previous view and the next view ,without the help of "findViewById" method.
thanks so much.
below is a part of layout 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>
回答1:
You can use the ViewGroup instance that's acting as a container for your widgets to do this.
See getChildAt(int) and indexOfChild(View)
So getChildAt(indexOfChild(v)+1) will get you the next view.
So something like
ViewGroup container = (ViewGroup) findViewbyID(R.tableRow1);
View slideBtn = findViewbyID(R.remoteLight);
View nextView = container.getChildAt(container.indexOfChild(slideBtn)+1);
You should add checks for overflow and that the next view is of the type that you do in fact want.
回答2:
I created two functions that put @CjS solution into use:
/**
* @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;
}
来源:https://stackoverflow.com/questions/13194823/how-to-get-the-previous-or-next-view