get parent's view from a layout
Solution 1
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.
Solution 2
If you are trying to find a View
from your Fragment
then try doing it like this:
int w = ((EditText)getActivity().findViewById(R.id.editText1)).getLayoutParams().width;
Solution 3
You can get ANY view by using the code below
view.rootView.findViewById(R.id.*name_of_the_view*)
EDIT: This works on Kotlin. In Java, you may need to do something like this=
this.getCurrentFocus().getRootView().findViewById(R.id.*name_of_the_view*);
I learned getCurrentFocus() function from: @JFreeman 's answer
Solution 4
The RelativeLayout
(i.e. the ViewParent
) should have a resource Id defined in the layout file (for example, android:id=@+id/myParentViewId
). If you don't do that, the call to getId will return null. Look at this answer for more info.
![Salvatore Ucchino](https://lh3.googleusercontent.com/-lquStjjgTTE/AAAAAAAAAAI/AAAAAAAAAEU/pIlMfUYcI3M/photo.jpg?sz=256)
Salvatore Ucchino
Updated on September 24, 2020Comments
-
Salvatore Ucchino almost 4 years
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
andScrollerLineraLayout
are in different packages of the same projects. I tried to use thegetParent()
function in this way within theScrollerLinearLayout
but it doesn't work.RelativeLayout r = (RelativeLayout) this.getParent().getParent(); int w = r.findViewById(R.id.editText1).getLayoutParams().width;
Someone help me? Thanks!
-
Salvatore Ucchino almost 11 yearsi tried to do this but it doesn't work. the error is nullpointexception on
RelativeLayout r = (RelativeLayout) ((ViewGroup) this.getParent()).getParent();
i don't understand what can be... -
Salvatore Ucchino almost 11 yearsthe
getActivity()
method is undefined for the type ScrollerLineraLayout which extends LinearLayout class -
Phil almost 11 years@Rajin, I added a section of my post to help you debug this issue.
-
Salvatore Ucchino almost 11 yearsi checked the log and i found that
ViewParent parent = this.getParent();
returns null. I have thispublic class ScrollerLinearLayout extends LinearLayout { RelativeLayout r; // some code public void init(){ // your code } }
is correct where i call thegetParent()
method?