EditText为null

时间:2014-02-25 21:55:11

标签: android android-edittext

我无法弄清楚为什么我的EditText为空。

public ChoiceView(Context context) {
        super(context);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View view = inflater.inflate(R.layout.choice_view, this, true);

        Log.d("TEST CHOICEVIEW", "1");
        et = (EditText) view.findViewById(R.id.enterChoice);
        if (et == null) Log.d("TEST CHOICEVIEW", "null"); // << this always produces "null" in Logcat
        tv = (TextView) findViewById(R.id.choiceViewTextView);
        Log.d("TEST CHOICEVIEW", "2");
        choiceString = et.getText().toString();
        Log.d("TEST CHOICEVIEW", "3");
        tv.setText(choiceString);

        Log.d("TEST CHOICEVIEW", "4");

        requestLayout();
    }

和找到EditText的xml文件(不是choice_view ......是一个问题吗?):

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

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

    <EditText
        android:id="@+id/enterChoice"
        android:hint="@string/enterChoiceText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >
        <requestFocus />
    </EditText>

    </ScrollView>

    <Button
        android:id="@+id/saveButton"
        android:text="@string/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

并且只是为了彻底,与ChoiceView类关联的choice_view.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/choiceViewTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</FrameLayout>

当我运行它时,Logcat会在崩溃之前产生以下内容:

TEST CHOICEVIEW 1
TEST CHOICEVIEW null
TEST CHOICEVIEW 2
AndroidRuntime Shutting down VM

如果您需要任何其他信息,请与我们联系。谢谢!

其他信息:

  • 从ChoiceList类中调用ChoiceView,代码如下:

    Context context = ChoiceList.this;
    ChoiceView cv = new ChoiceView(context);
    

2 个答案:

答案 0 :(得分:0)

您是否尝试过膨胀视图(假设您发布的代码位于code_view)而未将其附加到视图组?像这样:

final View view = inflater.inflate(R.layout.choice_view, null);

过去引起了我头痛的主题。

答案 1 :(得分:0)

您需要将要引用的组件包含在要扩充的XML布局中。

在我看来,您试图从多个XML文件引用Views(EditText)。这不合适

这就是为什么你找不到你正在寻找的视图 - choiceViewTextView 它位于choice_view.xml文件中(不是你要膨胀的文件)。更改此调用以引用layout.xml文件(您未指定此文件的名称)将解决您的问题。