我有问题。 view.setVisibility(View.GONE)不再适用于我。我会告诉你我正在做什么。
我在OnCreate()之外全局声明了这个:
final ArrayList<View> ViewList = new ArrayList<View>();
int CurrentViewId = 0;
int EmployerViewId = 0;
int LastViewId = 0;
之后我在OnCreate()中添加了这样的视图:
ViewList.add(findViewById(R.id.content_main_lo));
ViewList.add(findViewById(R.id.data1_lo));
ViewList.add(findViewById(R.id.data2_lo));
......总共得到了6.
单击“下一步”按钮后,应检查每个布局上的edittexts是否输入。如果填写了所有edittext,则Checkinput返回true。因此,如果它返回true,则从Viewlist中获取当前视图并使其变为Invisible,同时列表中的下一个视图将变为可见。
public void OnNextButtonClick(View v) {
if (CheckInput(v)) {
ViewList.get(CurrentViewId).setVisibility(View.GONE);
// ^^This
if (v.getId() == R.id.employer_btn)
CurrentViewId = EmployerViewId;
else {
CurrentViewId++;
if (CurrentViewId == EmployerViewId)
CurrentViewId = LastViewId;
}
ViewList.get(CurrentViewId).setVisibility(View.VISIBLE);
}
}
现在的结果是,即使我正确地填写了所有edittexts,并且CheckInput实际上返回true,当前视图(ViewList中的索引1,索引0工作)也不会变得不可见。 我调试了我的程序并进行了仔细研究,一切按计划进行,并且传递了ViewList.get(CurrentViewId).setVisibility(View.GONE);一切都在继续,但视线并没有在我的手机上消失。 然后我可以再次单击“下一步”按钮4,并且应用程序崩溃,因为OnNextButtonClick工作正常并且似乎实际上以某种方式加载其他视图,但是在第5次应用程序因为IndexOutOfBoundException而崩溃,因为只有6我的ViewList中的视图和我之前单击了按钮。
有人知道视图不会消失吗? 方法OnNextButtonClick适用于上一个视图(索引0)
非常感谢!
如果需要,这是Checkinput: 我基本上只是为按下的NextButton找到合适的布局 我将拟合布局赋予Border并返回其布尔值
public boolean CheckInput(View v) {
LinearLayout layout = null;
if (v.getId() == R.id.employee_btn_1){
setContentView(R.layout.employee_data1);
layout = (LinearLayout) findViewById(R.id.employee_lay);
}
else if (v.getId() == R.id.employee_btn_2){
setContentView(R.layout.employee_data2);
layout = (LinearLayout) findViewById(R.id.employee_lay2);
}
// ...
return (Border(layout));
这是边境方法:
public boolean Border(LinearLayout layout) {
boolean errorfree= true;
int check = 0;
if (layout.getChildCount() != 0) {
for (int i = 0; i < layout.getChildCount(); i++) {
View view = layout.getChildAt(i);
if (view instanceof EditText) {
String input = "";
EditText edt = (EditText) view;
if (view.getId() == this.workas_et.getId()) {
input = this.workas_et.getText().toString();
} else if (view.getId() == this.communicate_et.getId()) {
input = this.communicate_et.getText().toString();
}
// ...
if (input.isEmpty()) {
edt.setBackgroundResource(R.drawable.border);
check++;
} else {
edt.setText(input);
}
}
}
}
if (check != 0) {errorfree= false; }
return errorfree;
}