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!
RelativeLayout r = (RelativeLayout) this. getParent(). getParent(); int w = r. findViewById(R.
A ViewGroup "is a special view that can contain other views (called children.)" It's the superclass for all of the Layout classes. Parent view refers to a specific parent-child relationship (This RelativeLayout is the parent of this ImageView).
In android (and most other technologies), views can have subviews, aka "children". Most views can have children and can be a child of a parent view. It's kind of like a "tree". The most obvious feature of being a child of some other view is that the child moves with the parent view.
Defines the responsibilities for a class that will be a parent of a View. This is the API that a view sees when it wants to interact with its parent.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With