我已经创建了我的第一个计算器应用程序,但为了减小大小并简化代码,我想创建一个EditText
作为全局变量的Button
数组,然后创建一个也作为全局变量的数组。现在,当我EditText
在方法之外定义和初始化数组时,应用程序在开始时崩溃。
但是当我在方法外定义数组并在方法内初始化它时,我得到这里不允许的数组初始化错误。该怎么办?示例代码将不胜感激。
案例 1(应用程序崩溃)
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
EditText[] editList = {(EditText) findViewById(R.id.decValue), (EditText) findViewById(R.id.octValue), (EditText) findViewById(R.id.hexValue), (EditText) findViewById(R.id.hexValue),(EditText) findViewById(R.id.binValue)};
..
@Override
protected void onCreate(Bundle savedInstanceState) {
..
}
}
Case-2(这里无法初始化数组的错误)
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
EditText[] editList;
..
@Override
protected void onCreate(Bundle savedInstanceState) {
..
editList = {(EditText) findViewById(R.id.decValue), (EditText) findViewById(R.id.octValue), (EditText) findViewById(R.id.hexValue), (EditText) findViewById(R.id.hexValue),(EditText) findViewById(R.id.binValue)};
}
}
情况1
您正在使用实例初始值设定项,因此您的列表在 MainActivity 的构造函数被调用之前和 onCreate() -> setContentView() 之前被初始化,这意味着此时没有 UI。
案例二
声明成员变量时只能使用速记数组初始化语法。
将其替换为new EditText[]{...}
.
建议
我会使用ButterKnife库。它使视图绑定更容易,您还可以将多个视图分组到一个列表中,这正是您想要实现的。
添加依赖
dependencies {
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
在您的活动中:
@BindViews({R.id.first_name, R.id.middle_name, R.id.last_name})
List<EditText> nameViews;
@Override
public void onCreate(Bundle savedInstanceState) {
//...
ButterKnife.bind(this);
}
就是这样。看起来更具可读性。
将操作应用于列表中的所有视图:
ButterKnife.apply(list, (view, index) -> {
//your action for view
});
有关详细信息,请查看文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句