我正在尝试使用我创建的类中的 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.html和 https://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 或 viewGroup 中。这些并不是为了处理点击。您应该处理 Activity 或 Fragment 上的点击。
关于android - 在继承于RelativeLayout的类中调用此方法时,findViewById返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20519026/