gpt4 book ai didi

android - 在 RelativeLayout 上扩展的类中调用时,findViewById 返回 null

转载 作者:搜寻专家 更新时间:2023-11-01 08:54:03 26 4
gpt4 key购买 nike

我正在尝试使用我创建的类中的 activity_main 中的 findViewById 方法获取布局。此类扩展了 RelativeLayout,在构造函数中,当用户单击 RelativeLayout 时,我试图为用户实现 onClick 方法,这会创建另一个布局,因此我需要获取该布局以添加到 View 中。

这是我获得 NPE 的代码:

public class PatientBoxLayout extends RelativeLayout {

/**
*
*/
private Patient patient;

/**
* Constructor de la clase Patient Box
*
* @param context
* @param patient
*/

public static double coefi = 3.3;

public PatientBoxLayout(Context aContext, Patient aPatient) {
super(aContext);

setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

RelativeLayout horizontalLL = (RelativeLayout) findViewById(R.id.upp_layout);
horizontalLL.addView(new PatientBoxLayout(v.getContext(),
((PatientBoxLayout) v).getPatient()));
}
});

这是 XML:

<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"
tools:context=".MainActivity" >

<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical" >

<RelativeLayout
android:id="@+id/upp_layout"
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="258dp"
android:layout_marginTop="18dp"
android:text="Paciente" />

<TextView
android:id="@+id/textViewNomPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView1"
android:layout_marginLeft="18dp"
android:layout_toRightOf="@+id/textView1"
android:text="TextView" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_alignRight="@+id/textView3"
android:layout_below="@+id/textView1"
android:layout_marginTop="15dp"
android:text="Edad" />

<TextView
android:id="@+id/textViewEdadPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView2"
android:layout_alignBottom="@+id/textView2"
android:layout_alignRight="@+id/textViewNomPaciente"
android:text="TextView" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_centerVertical="true"
android:text="Cama" />

<TextView
android:id="@+id/textViewCamaPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView3"
android:layout_alignBottom="@+id/textView3"
android:layout_alignLeft="@+id/textViewEdadPaciente"
android:text="TextView" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/textView3"
android:layout_marginTop="21dp"
android:text="Sexo" />

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView4"
android:layout_alignBottom="@+id/textView4"
android:layout_alignLeft="@+id/textViewCamaPaciente"
android:text="TextView" />

<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textViewNomPaciente"
android:layout_alignBottom="@+id/textViewNomPaciente"
android:layout_centerHorizontal="true"
android:text="NHC" />

<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textViewEdadPaciente"
android:layout_alignBottom="@+id/textViewEdadPaciente"
android:layout_alignLeft="@+id/textView6"
android:text="Episodio" />

<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textViewCamaPaciente"
android:layout_alignBottom="@+id/textViewCamaPaciente"
android:layout_alignLeft="@+id/textView7"
android:text="Diagnostico" />

<TextView
android:id="@+id/textViewNHCPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView6"
android:layout_alignBottom="@+id/textView6"
android:layout_marginLeft="33dp"
android:layout_toRightOf="@+id/textView8"
android:text="TextView" />

<TextView
android:id="@+id/textViewEpisodioPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView7"
android:layout_alignLeft="@+id/textViewNHCPaciente"
android:text="TextView" />

<TextView
android:id="@+id/textViewDiagnosticoPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView8"
android:layout_alignBottom="@+id/textView8"
android:layout_alignLeft="@+id/textViewEpisodioPaciente"
android:text="TextView" />

<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textViewNHCPaciente"
android:layout_alignBottom="@+id/textViewNHCPaciente"
android:layout_marginLeft="79dp"
android:layout_toRightOf="@+id/textViewNHCPaciente"
android:text="FIngreso" />

<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textViewEpisodioPaciente"
android:layout_alignBottom="@+id/textViewEpisodioPaciente"
android:layout_alignLeft="@+id/textView9"
android:text="Servicio" />

<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textViewDiagnosticoPaciente"
android:layout_alignLeft="@+id/textView10"
android:text="Alergias" />

<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView5"
android:layout_alignBottom="@+id/textView5"
android:layout_alignLeft="@+id/textView11"
android:text="Aislado" />

<TextView
android:id="@+id/textViewFIngresoPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView9"
android:layout_alignBottom="@+id/textView9"
android:layout_marginLeft="55dp"
android:layout_toRightOf="@+id/textView9"
android:text="TextView" />

<TextView
android:id="@+id/textViewServicioPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView10"
android:layout_alignBottom="@+id/textView10"
android:layout_alignLeft="@+id/textViewFIngresoPaciente"
android:text="TextView" />

<TextView
android:id="@+id/textViewA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView11"
android:layout_alignBottom="@+id/textView11"
android:layout_alignLeft="@+id/textViewServicioPaciente"
android:text="TextView" />

<TextView
android:id="@+id/textViewAisladoPaciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView12"
android:layout_alignBottom="@+id/textView12"
android:layout_alignLeft="@+id/textViewA"
android:text="TextView" />
</RelativeLayout>
</RelativeLayout>

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="bottom"
android:visibility="visible" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<ScrollView
android:id="@+id/scrollView1"
android:layout_width="wrap_content"
android:layout_height="match_parent" >

<LinearLayout
android:id="@+id/down_layout"
android:layout_width="match_parent"
android:layout_height="0dip"
android:orientation="horizontal" >
</LinearLayout>
</ScrollView>
<!-- Contenido principal -->

</LinearLayout>
</RelativeLayout>
</LinearLayout>
<!-- Contenido principal -->

<ListView
android:id="@+id/drawer"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:background="#EEE"
tools:listitem="@android:layout/simple_list_item_single_choice" >
</ListView>
</android.support.v4.widget.DrawerLayout>

</RelativeLayout>

我希望你能帮我从类的构造函数中识别布局。

谢谢。问候

最佳答案

如果您查看文档:https://developer.android.com/reference/android/app/Activity.htmlhttps://developer.android.com/reference/android/view/View.html Activity 和 View 都有一个 findViewById 方法。

因此,当您在 PatientBoxLayout 中调用 findViewById(R.id.upp_layout); 时,试图仅在其自己的布局树中找到该 View 。它找不到,因为它不存在。因此它返回 null 并且您在下一行因 NullPointerException 而崩溃。

您可以调用 getParent() 在布局层次结构中向上导航,然后在那里调用 findViewById(R.id.upp_layout); 或者更好的解决方案是不要将 ClickListener 放在 View 或 View 组中。这些并不是为了处理点击。您应该处理 Activity 或 Fragment 上的点击。

关于android - 在 RelativeLayout 上扩展的类中调用时,findViewById 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20519026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com