我在android中有一组开关;我们打电话给他们......
Switch one;
Switch two;
Switch three;
Switch four;
Switch five;
我也有一个包含这些视图的数组。
Switch[] switchArray = {one, two, three, four, five};
然后,在我的onCreateView()方法中;我使用findViewById()分配所有这些开关。
one = (Switch) findViewById(R.id.switchOne);
two = (Switch) findViewById(R.id.switchTwo);
three = (Switch) findViewById(R.id.switchThree);
four = (Switch) findViewById(R.id.switchFour);
five = (Switch) findViewById(R.id.switchFive);
现在;当我创建一个for循环来检查该数组是否为null时:
for(int i = 0; i<switchArray.length; i++){
if(switchArray[i] == null){
Log.d(TAG, "Array is null at:" + i);
}
}
我得到以下logcat:
Array is null at: 1
Array is null at: 2
Array is null at: 3
Array is null at: 4
Array is null at: 5
我不确定为什么这些变量返回null如果我试图在onCreate中实例化它们...如果我也尝试在onCreate之前实例化它们(在任何方法之前的类头中);我仍然得到同样的错误。
希望问题很清楚。
编辑1:完整的ONCREATEVIEW方法
public View onCreateView(LayoutInflater viewInflation, ViewGroup container,
Bundle SavedInstantState) {
superContext = getActivity().getApplicationContext();
digitalfragmentview = viewInflation.inflate(
R.layout.digitalfragment_page, container, false);
digitalIO0Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio0mode);
digitalIO1Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio1mode);
digitalIO2Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio2mode);
digitalIO3Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio3mode);
digitalIO4Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio4mode);
digitalIO5Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio5mode);
digitalIO6Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio6mode);
digitalIO7Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio7mode);
digitalIO8Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio8mode);
digitalIO9Mode = (Switch) digitalfragmentview
.findViewById(R.id.digitalio9mode);
// sets the listener for the mode switches
for (int i = 0; i < digitalIOModeSwitchArray.length; i++) {
if (digitalIOModeSwitchArray[i] == null) {
Log.d(TAG, "Array is null at:" + i);
}
}
return digitalfragmentview;
}
答案 0 :(得分:3)
Switch[] switchArray = {one, two, three, four, five};
在您创建数组时包含对one, two, three, four, five
的引用。
后来,你重新分配这些变量,但你的数组仍指向先前的引用。
您需要在分配视图后创建阵列:
one = (Switch) findViewById(R.id.switchOne);
two = (Switch) findViewById(R.id.switchTwo);
three = (Switch) findViewById(R.id.switchThree);
four = (Switch) findViewById(R.id.switchFour);
five = (Switch) findViewById(R.id.switchFive);
// Then only
switchArray = {one, two, three, four, five};
答案 1 :(得分:2)
首先在变量中引用您的小部件
one = (Switch) findViewById(R.id.switchOne);
two = (Switch) findViewById(R.id.switchTwo);
three = (Switch) findViewById(R.id.switchThree);
four = (Switch) findViewById(R.id.switchFour);
five = (Switch) findViewById(R.id.switchFive);
然后把它们放在一个数组
中 Switch[] switchArray = {one, two, three, four, five};
原因是Switch数组是值类型而不是引用类型
答案 2 :(得分:1)
试试这个..
one = (Switch) findViewById(R.id.switchOne);
而不是这个..
one = findViewById(R.id.switchOne);
修改强>
switchArray[0] = (Switch) findViewById(R.id.switchOne);