我无法弄清楚为什么我的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);
答案 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文件(您未指定此文件的名称)将解决您的问题。