View.setVisibility(View.Gone)不再有效

时间:2016-11-22 17:57:24

标签: java android view visibility

我有问题。 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;
}

0 个答案:

没有答案