来自LayoutInflater的FindViewById

时间:2018-12-05 09:22:56

标签: java android android-inflate

我有一个用于充气布局的代码:

mainLayout = findViewById(R.id.mainLayout);

addNewMed.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        addNewMed.startAnimation(AnimationUtils.loadAnimation(MedicationAdd.this, R.anim.rotate_complete));
        v = LayoutInflater.from(MedicationAdd.this).inflate(R.layout.medication_poles, null);
        mesurement = v.findViewById(R.id.mesurement);
        mainLayout.addView(v);
    }
});

当我要从mesurement中找到我的微调器medication_poles时,会出现空错误

medication_poles.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/medPole"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginBottom="8dp">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Время приема"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Препарат"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Дозировка"/>

    <Spinner
        android:id="@+id/mesurement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </Spinner>

</LinearLayout>

如何从膨胀的布局中找到对象?

4 个答案:

答案 0 :(得分:1)

您正在使用通过onClick方法传递给您的视图。 v(view)的作用域如此之大,因此您不能在该方法之外使用该view对象。 v(视图对象)可能会导致崩溃,因为它可能无法从按钮类强制转换为视图类。

尝试下面的代码。

<div class="outer-container padding">
  <div class="overflowing-container padding">
    <div class="large-element"></div>
    <div class="large-element"></div>
    <div class="large-element"></div>
  </div>
  <div class="inherit-height-container"></div>
</div>

答案 1 :(得分:0)

我认为问题在于您没有在容器中添加放大视图。 因此,替换:

 v = LayoutInflater.from(MedicationAdd.this).inflate(R.layout.medication_poles, null)

具有:

 v = LayoutInflater.from(MedicationAdd.this).inflate(R.layout.medication_poles, mainView,false)

答案 2 :(得分:0)

尝试一下:

addNewMed.startAnimation(AnimationUtils.loadAnimation(MedicationAdd.this,R.anim.rotate_complete));        
another_view = getLayoutInflater().inflate(R.layout.medication_poles, null);
mesurement = another_view.findViewById(R.id.mesurement);
mainLayout.addView(another_view);

答案 3 :(得分:0)

使用“ view”等不同名称定义New View对象,v是onClick实例参数,您应该使用另一个。

尝试:

addNewMed.startAnimation(AnimationUtils.loadAnimation(MedicationAdd.this, R.anim.rotate_complete));
           View view = LayoutInflater.from(MedicationAdd.this).inflate(R.layout.medication_poles, null);
mesurement = view.findViewById(R.id.mesurement);
            mainLayout.addView(view);