Android 在ListView中访问EditText
我有一个带有自定义适配器的ListView,其中包含一个Android 在ListView中访问EditText,android,listview,android-adapter,Android,Listview,Android Adapter,我有一个带有自定义适配器的ListView,其中包含一个EditText。我希望能够访问此EditText并设置文本。我正在使用此代码访问EditText firstName = (EditText) details.getChildAt(0).findViewById(R.id.editText); lastName = (EditText) details.getChildAt(1).findViewById(R.id.editText); work = (Edit
EditText
。我希望能够访问此EditText
并设置文本。我正在使用此代码访问EditText
firstName = (EditText) details.getChildAt(0).findViewById(R.id.editText);
lastName = (EditText) details.getChildAt(1).findViewById(R.id.editText);
work = (EditText) details.getChildAt(2).findViewById(R.id.editText);
mobile = (EditText) details.getChildAt(3).findViewById(R.id.editText);
home = (EditText) details.getChildAt(4).findViewById(R.id.editText);
relation = (EditText) details.getChildAt(5).findViewById(R.id.editText);
primarySwitch = (Switch) details.getChildAt(6).findViewById(R.id.primaryContactSwitch);
当我尝试使用按钮访问它们时,它会按预期工作。当通过onCreate
方法访问它们时,它会崩溃:
Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
这就好像我在创建它之前正在访问ListView
。以下是onCreate
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_emergency_contact_details);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
wireUpControls();
checkForExistingId();
}
private void wireUpControls(){
emergencyArray = getResources().getStringArray(R.array.emergency);
details = (ListView) findViewById(android.R.id.list);
EmergencyContactAdapter adapter = new EmergencyContactAdapter(emergencyArray, this);
details.setAdapter(adapter);
firstName = (EditText) details.getChildAt(0).findViewById(R.id.editText);
lastName = (EditText) details.getChildAt(1).findViewById(R.id.editText);
work = (EditText) details.getChildAt(2).findViewById(R.id.editText);
mobile = (EditText) details.getChildAt(3).findViewById(R.id.editText);
home = (EditText) details.getChildAt(4).findViewById(R.id.editText);
relation = (EditText) details.getChildAt(5).findViewById(R.id.editText);
primarySwitch = (Switch) details.getChildAt(6).findViewById(R.id.primaryContactSwitch);
}
有什么想法吗?在滚动视图时,
列表视图将创建视图。您试图访问它们的时间太早,以至于视图尚未创建,因此它们返回null。您应该尝试找到一种方法,将findviewbyd
逻辑放入ListView的适配器中
但是,我怀疑您甚至不应该使用ListView
。如果您有静态内容(在本例中为7EditText
),则更可能需要滚动视图。您试图实现这一点的方式让我觉得ListView
不是适合这项工作的工具。(将常量数组传递到ListView的适配器也证明了这一点——ListView用于动态数据)。您可以在适配器中访问getView方法内部的EditText,如:
convertView.findViewById(R.id.your_edittext_id);
现在,您可以仅在上面的editText对象上设置文本。尝试在onStart()或onResume()上访问它们。