我有一个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);
}
有什么想法吗?
答案 0 :(得分:0)
ListView
会在您滚动浏览时创建视图。您试图尽早访问它们以至于尚未创建视图,因此它们返回null。您应该尝试找到将findViewById
逻辑放入ListView适配器的方法。
但是,我怀疑你甚至不应该使用ListView
。如果您有静态内容(在本例中为7 EditText
),则您更可能需要ScrollView
。你试图接近这个的方式让我觉得ListView
不适合这项工作。 (这也可以通过将常量数组传递到ListView的适配器中来证明 - ListViews用于动态数据)。
答案 1 :(得分:0)
您可以在适配器中访问getView方法中的EditText,如:
T
现在,您只能在editText对象上方设置文本。