このレイアウトのFragmentActivity
があります:
<?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>
scrollerLinearLayoutクラスは次のようなものです。
public class ScrollerLinearLayout extends LinearLayout {
// code of the class
}
ScrollerLinearLayout
から親レイアウトにアクセスして、たとえばeditetxtを取得する方法は? FragmentActivity
とScrollerLineraLayout
は、同じプロジェクトの異なるパッケージにあります。 ScrollerLinearLayout
内でgetParent()
関数をこの方法で使用しようとしましたが、機能しません。
RelativeLayout r = (RelativeLayout) this.getParent().getParent();
int w = r.findViewById(R.id.editText1).getLayoutParams().width;
誰か助けて?ありがとう!
getParent
メソッドは、ViewParent
ではなく、View
を返します。 getParent()
への最初の呼び出しもキャストする必要があります。
RelativeLayout r = (RelativeLayout) ((ViewGroup) this.getParent()).getParent();
OPのコメントで述べられているように、これはNPE
を引き起こしています。デバッグするには、これを複数の部分に分割します。
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.
View
からFragment
を見つけようとしている場合は、次のようにしてみてください。
int w = ((EditText)getActivity().findViewById(R.id.editText1)).getLayoutParams().width;
RelativeLayout
(つまり、ViewParent
)には、レイアウトファイルで定義されたリソースIDが必要です(たとえば、Android:id=@+id/myParentViewId
)。そうしないと、getIdの呼び出しはnullを返します。詳細については この回答 をご覧ください。
書くだけ
this.getRootView();
これも機能します:
this.getCurrentFocus()
ビューを取得して使用できるようにします。