Android 在ListView中访问EditText

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

我有一个带有自定义适配器的ListView,其中包含一个
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
。如果您有静态内容(在本例中为7
EditText
),则更可能需要
滚动视图。您试图实现这一点的方式让我觉得
ListView
不是适合这项工作的工具。(将常量数组传递到ListView的适配器也证明了这一点——ListView用于动态数据)。

您可以在适配器中访问getView方法内部的EditText,如:

convertView.findViewById(R.id.your_edittext_id);
现在,您可以仅在上面的editText对象上设置文本。

尝试在onStart()或onResume()上访问它们。