get parent's view from a layout

android, android-layout, parent-child, view

Solution

The `getParent` method returns a `ViewParent`, not a `View`. You need to cast the first call to `getParent()` also:

RelativeLayout r = (RelativeLayout) ((ViewGroup) this.getParent()).getParent();

As stated in the comments by the OP, this is causing a `NPE`. To debug, split this up into multiple parts:

ViewParent parent = this.getParent();
RelativeLayout r;
if (parent == null) {
    Log.d("TEST", "this.getParent() is null");
}
else {
    if (parent instanceof ViewGroup) {
        ViewParent grandparent = ((ViewGroup) parent).getParent();
        if (grandparent == null) {
            Log.d("TEST", "((ViewGroup) this.getParent()).getParent() is null");
        }
        else {
            if (parent instanceof RelativeLayout) {
                r = (RelativeLayout) grandparent;
            }
            else {
                Log.d("TEST", "((ViewGroup) this.getParent()).getParent() is not a RelativeLayout");
            }
        }
    }
    else {
        Log.d("TEST", "this.getParent() is not a ViewGroup");
    }
}

//now r is set to the desired RelativeLayout.

Problem

I have a `FragmentActivity` with this layout: ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/menulabel" android:textSize="24sp" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputType="text" android:layout_below="@+id/textView1" android:hint="@string/search_title_hint" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/spinnersearch" android:layout_below="@+id/editText1" /> <LinearLayout android:id="@+id/layout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView2" > <Spinner android:id="@+id/spinner_search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:prompt="@string/spinnersearch" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/reset_search" /> </LinearLayout> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttonnewcat" android:layout_below="@+id/layout1" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttondelcat" android:layout_below="@+id/button2" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttoneditcat" android:layout_below="@+id/button3" /> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttonnewtext" android:layout_below="@+id/button4" /> <Button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttondeltext" android:layout_below="@+id/button5" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <side.menu.scroll.ScrollerLinearLayout android:id="@+id/menu_content_side_slide_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="45dp" android:background="@drawable/ab_solid_example" android:orientation="horizontal" > <ImageView android:id="@+id/main_tmp_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/actionbar_background" android:src="@drawable/download" /> </LinearLayout> <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_groud" /> </side.menu.scroll.ScrollerLinearLayout> </RelativeLayout> ``` and the ScrollerLinearLayout class is something like this: ``` public class ScrollerLinearLayout extends LinearLayout { // code of the class } ``` How to access from `ScrollerLinearLayout` to the parent layout to get - for example - the editetxt? `FragmentActivity` and `ScrollerLineraLayout` are in different packages of the same projects. I tried to use the `getParent()` function in this way within the `ScrollerLinearLayout` but it doesn't work. ``` RelativeLayout r = (RelativeLayout) this.getParent().getParent(); int w = r.findViewById(R.id.editText1).getLayoutParams().width; ``` Someone help me? Thanks!

Original source

Related problems