Java setcontentview在尝试创建新的EditText后使应用程序崩溃

Java setcontentview在尝试创建新的EditText后使应用程序崩溃,java,android,crash,setcontentview,Java,Android,Crash,Setcontentview,我正在尝试编写一个notes管理应用程序,当我添加一些新的备注时,请删除它们,然后尝试添加新的备注该应用程序正在setcontentview()上崩溃。 我添加了日志,它可以通过删除first editText然后添加一个新文本轻松触发 public class Mainpage extends AppCompatActivity { private LinearLayout MyLayout; private ScrollView sv; private List<EditText&g

我正在尝试编写一个notes管理应用程序,当我添加一些新的备注时,请删除它们,然后尝试添加新的备注该应用程序正在setcontentview()上崩溃。 我添加了日志,它可以通过删除first editText然后添加一个新文本轻松触发

public class Mainpage extends AppCompatActivity {

private LinearLayout MyLayout;
private ScrollView sv;
private List<EditText> et = new ArrayList<EditText>();
private List<EditText> ct = new ArrayList<EditText>();
private List<TextView> tv = new ArrayList<TextView>();
private List<CheckBox> cb = new ArrayList<CheckBox>();
private Button btn;
final Context context = this;
private CountDownTimer timer;
boolean isWaiting;
int last_added;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_mainpage);
    last_added = 0;
    //btn = (Button) findViewById(R.id.btn);
    //btn.setVisibility(View.INVISIBLE);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_mainpage, menu);
    sv = new ScrollView(this);
    MyLayout = new LinearLayout(this);
    MyLayout.setOrientation(LinearLayout.VERTICAL);
    sv.addView(MyLayout);
    timer = new CountDownTimer(500,500) {
        @Override
        public void onTick(long millisUntilFinished) {
        }
        @Override
        public void onFinish() {
            isWaiting = false;
        }
    };
    btn = new Button(this);
    btn.setText("Accept");
    btn.setVisibility(View.INVISIBLE);
    MyLayout.addView(btn);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();


    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    else if (id == R.id.action_add) {


        et.add(new EditText(this)) ;
        tv.add(new TextView(this));
        ct.add(new EditText(this));
        cb.add(new CheckBox(this));
        cb.get(ct.size() -1).setVisibility(View.INVISIBLE);
        ct.get(ct.size() -1).setVisibility(View.INVISIBLE);
        Calendar cal = Calendar.getInstance();
        String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
        tv.get(tv.size() -1).setText("created on" + date);
        et.get(et.size() - 1).setText("weeeeeeeeeee~!");

        MyLayout.addView(et.get(et.size() - 1));
        MyLayout.addView(ct.get(ct.size() -1));
        MyLayout.addView(tv.get(tv.size() - 1));
        MyLayout.addView(cb.get(cb.size() - 1));

        this.setContentView(sv);


        et.get(last_added).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(int i=0;i<et.size();i++)
            {
                if(et.get(i) == v)
                {
                    last_added = i + 1;
                    break;
                }
            }

            if(isWaiting) {
                isWaiting = false;
                timer.cancel();
                // TODO: open a new EditText
                if(ct.get(last_added -1).isShown())
                {
                    ct.get(last_added -1).setVisibility(View.INVISIBLE);
                }
                else

                {
                    ct.get(last_added -1).setVisibility(View.VISIBLE);
                }


                }
            else {
                        isWaiting = true;
                        timer.start();
                    }
                }
            });
        last_added++;
        return true;
    }

    else if (id == R.id.action_delete) {
        btn.setVisibility(View.VISIBLE);
        for (int i = 0; i < cb.size(); i++) {
            cb.get(i).setVisibility(View.VISIBLE);
        }
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for(int j=0; j < cb.size();j++)
                {
                    if(cb.get(j).isChecked())
                    {
                        et.get(j).setVisibility(View.GONE);
                        tv.get(j).setVisibility(View.GONE);
                        ct.get(j).setVisibility(View.GONE);
                        cb.get(j).setVisibility(View.GONE);
                        et.remove(j);
                        tv.remove(j);
                        ct.remove(j);
                        cb.remove(j);
                    }
                }
                btn.setVisibility(View.INVISIBLE);
                for (int i = 0; i < cb.size(); i++) {
                    cb.get(i).setVisibility(View.INVISIBLE);
                }
            }
        });

        this.setContentView(sv);

        return true;
    }
    else if (id == R.id.action_search) {
        return true;
    }
    else if (id == R.id.action_send) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}
1) 你的错误 错误显示在125中您有IndexOutOfBoundsException例外

at com.example.user_pc.notes.Mainpage.onOptionsItemSelected(Mainpage.java:125)
在一个数组上调用get函数。列表中有一项。maxumum的索引必须为0,但调用1会引发IndexOutOfBoundsException

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
2) 您不需要创建附加的arraylist

private List<EditText> et = new ArrayList<EditText>();
3) 您不需要在ScrollView上调用以下方法。它必须是自动的

this.setContentView(sv);
4) 最后你的代码被破解了。试着用标准的方式。阅读android教程

1)您的错误 错误显示在125中您有IndexOutOfBoundsException例外

at com.example.user_pc.notes.Mainpage.onOptionsItemSelected(Mainpage.java:125)
在一个数组上调用get函数。列表中有一项。maxumum的索引必须为0,但调用1会引发IndexOutOfBoundsException

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
2) 您不需要创建附加的arraylist

private List<EditText> et = new ArrayList<EditText>();
3) 您不需要在ScrollView上调用以下方法。它必须是自动的

this.setContentView(sv);
4) 最后你的代码被破解了。试着用标准的方式。阅读android教程

修复了它。 当我尝试添加新的编辑文本时,上次添加的文本太高

公共类主页扩展了AppCompatActivity{

private LinearLayout MyLayout;
private ScrollView sv;
private List<EditText> et = new ArrayList<EditText>();
private List<EditText> ct = new ArrayList<EditText>();
private List<TextView> tv = new ArrayList<TextView>();
private List<CheckBox> cb = new ArrayList<CheckBox>();


private Button btn;
final Context context = this;
private CountDownTimer timer;
boolean isWaiting;
int last_added;
int num_removed;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_mainpage);
    last_added = 0;
    //btn = (Button) findViewById(R.id.btn);
    //btn.setVisibility(View.INVISIBLE);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_mainpage, menu);
    sv = new ScrollView(this);
    MyLayout = new LinearLayout(this);
    MyLayout.setOrientation(LinearLayout.VERTICAL);
    sv.addView(MyLayout);
    timer = new CountDownTimer(500,500) {
        @Override
        public void onTick(long millisUntilFinished) {
        }
        @Override
        public void onFinish() {
            isWaiting = false;
        }
    };
    btn = new Button(this);
    btn.setText("Accept");
    btn.setVisibility(View.INVISIBLE);
    MyLayout.addView(btn);
    ///search shit

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();


    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    else if (id == R.id.action_add) {


        et.add(new EditText(this)) ;
        tv.add(new TextView(this));
        ct.add(new EditText(this));
        cb.add(new CheckBox(this));
        cb.get(ct.size() -1).setVisibility(View.INVISIBLE);
        ct.get(ct.size() -1).setVisibility(View.INVISIBLE);
        Calendar cal = Calendar.getInstance();
        String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
        tv.get(tv.size() -1).setText("created on" + date);
        et.get(et.size() - 1).setText("weeeeeeeeeee~!");
        MyLayout.addView(et.get(et.size() - 1));
        MyLayout.addView(ct.get(ct.size() -1));
        MyLayout.addView(tv.get(tv.size() - 1));
        MyLayout.addView(cb.get(cb.size() - 1));

        this.setContentView(sv);

        et.get(last_added).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(int i=0;i<et.size();i++)
            {
                if(et.get(i) == v)
                {
                    last_added = i + 1;
                    break;
                }
            }

            if(isWaiting) {
                isWaiting = false;
                timer.cancel();
                // TODO: open a new EditText
                if(ct.get(last_added -1).isShown())
                {
                    ct.get(last_added -1).setVisibility(View.INVISIBLE);
                }
                else

                {
                    ct.get(last_added -1).setVisibility(View.VISIBLE);
                }


                }
            else {
                        isWaiting = true;
                        timer.start();
                    }
                }
            });
        last_added++;
        return true;
    }

    else if (id == R.id.action_delete) {
        num_removed = 0;
        btn.setVisibility(View.VISIBLE);
        for (int i = 0; i < cb.size(); i++) {
            cb.get(i).setVisibility(View.VISIBLE);
        }
        btn.setOnClickListener(new View.OnClickListener() {
            int checked =0;
            @Override
            public void onClick(View v) {
                while(true)
                {
                    for(int j=0;j< cb.size();j++)
                    {
                        if(cb.get(j).isChecked())
                        {
                            checked++;
                        }

                    }
                    if(checked == 0)
                    {
                        break;
                    }
                    for(int i=0;i<cb.size();i++)
                    {
                        if(cb.get(i).isChecked())
                        {
                            et.get(i).setVisibility(View.GONE);
                            tv.get(i).setVisibility(View.GONE);
                            ct.get(i).setVisibility(View.GONE);
                            cb.get(i).setVisibility(View.GONE);
                            et.remove(i);
                            tv.remove(i);
                            ct.remove(i);
                            cb.remove(i);
                            last_added--;
                        }
                    }
                    checked = 0;
                }

                btn.setVisibility(View.INVISIBLE);
                for (int i = 0; i < cb.size(); i++) {
                    cb.get(i).setVisibility(View.INVISIBLE);
                }
            }
        });

        this.setContentView(sv);

        return true;
    }
    else if (id == R.id.action_search) {
        btn.setVisibility(View.VISIBLE);
        for (int i = 0; i < cb.size(); i++) {
            cb.get(i).setVisibility(View.VISIBLE);
        }

        return true;
    }

    else if (id == R.id.action_send)
    {


        btn.setVisibility(View.VISIBLE);

        for (int i = 0; i < cb.size(); i++)
        {
            cb.get(i).setVisibility(View.VISIBLE);
            cb.get(i).setChecked(false);
        }
        btn.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                String [] to = new String[]{};

                for(int j=0; j < cb.size();j++)
                {
                    if(cb.get(j).isChecked())
                    {
                        sendEmail(et.get(j).getText().toString(),ct.get(j).getText().toString());
                    }

                }
                btn.setVisibility(View.INVISIBLE);
                for (int i = 0; i < cb.size(); i++)
                {
                    cb.get(i).setVisibility(View.INVISIBLE);
                }
        }});

        this.setContentView(sv);

        return true;
    }
    return super.onOptionsItemSelected(item);
}




protected void sendEmail(String subject,String Context)
{

    Intent emailIntent = new Intent(Intent.ACTION_SEND);

    emailIntent.putExtra(Intent.EXTRA_SUBJECT,subject);
    emailIntent.putExtra(Intent.EXTRA_TEXT,Context);
    emailIntent.setType("message/rfc822");
    startActivity(Intent.createChooser(emailIntent,"Email"));
}
private LinearLayout MyLayout;
私有滚动视图sv;
private List et=new ArrayList();
私有列表ct=newarraylist();
private List tv=new ArrayList();
私有列表cb=新的ArrayList();
专用按钮btn;
最终上下文=此;
私人倒计时;
我在等待;
最后添加的int;
移除int num_;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_主页);
最后添加的_=0;
//btn=(按钮)findViewById(R.id.btn);
//btn.setVisibility(视图不可见);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.menu\u主页,菜单);
sv=新的滚动视图(此);
MyLayout=新的线性布局(本);
MyLayout.setOrientation(线性布局.垂直);
sv.addView(MyLayout);
计时器=新的倒计时计时器(500500){
@凌驾
公共void onTick(长毫秒未完成){
}
@凌驾
公共无效onFinish(){
isWaiting=false;
}
};
btn=新按钮(此按钮);
btn.setText(“接受”);
btn.setVisibility(视图不可见);
MyLayout.addView(btn);
///搜索狗屎
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
else if(id==R.id.action\u add){
添加(新编辑文本(本));
添加(新文本视图(this));
添加(新编辑文本(本));
cb.添加(新复选框(此));
cb.get(ct.size()-1).setVisibility(View.INVISIBLE);
ct.get(ct.size()-1).setVisibility(View.INVISIBLE);
Calendar cal=Calendar.getInstance();
字符串日期=新的SimpleDataFormat(“dd-MM-yyyy”).format(新日期());
tv.get(tv.size()-1).setText(“创建日期”+date);
et.get(et.size()-1).setText(“weeeee~!”);
addView(et.get(et.size()-1));
addView(ct.get(ct.size()-1));
MyLayout.addView(tv.get(tv.size()-1));
addView(cb.get(cb.size()-1));
这个.setContentView(sv);
et.get(最后添加的)。setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
对于(inti=0;i修正了它。
当我尝试添加新的编辑文本时,上次添加的文本太高

公共类主页扩展了AppCompatActivity{

private LinearLayout MyLayout;
private ScrollView sv;
private List<EditText> et = new ArrayList<EditText>();
private List<EditText> ct = new ArrayList<EditText>();
private List<TextView> tv = new ArrayList<TextView>();
private List<CheckBox> cb = new ArrayList<CheckBox>();


private Button btn;
final Context context = this;
private CountDownTimer timer;
boolean isWaiting;
int last_added;
int num_removed;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_mainpage);
    last_added = 0;
    //btn = (Button) findViewById(R.id.btn);
    //btn.setVisibility(View.INVISIBLE);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_mainpage, menu);
    sv = new ScrollView(this);
    MyLayout = new LinearLayout(this);
    MyLayout.setOrientation(LinearLayout.VERTICAL);
    sv.addView(MyLayout);
    timer = new CountDownTimer(500,500) {
        @Override
        public void onTick(long millisUntilFinished) {
        }
        @Override
        public void onFinish() {
            isWaiting = false;
        }
    };
    btn = new Button(this);
    btn.setText("Accept");
    btn.setVisibility(View.INVISIBLE);
    MyLayout.addView(btn);
    ///search shit

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();


    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    else if (id == R.id.action_add) {


        et.add(new EditText(this)) ;
        tv.add(new TextView(this));
        ct.add(new EditText(this));
        cb.add(new CheckBox(this));
        cb.get(ct.size() -1).setVisibility(View.INVISIBLE);
        ct.get(ct.size() -1).setVisibility(View.INVISIBLE);
        Calendar cal = Calendar.getInstance();
        String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
        tv.get(tv.size() -1).setText("created on" + date);
        et.get(et.size() - 1).setText("weeeeeeeeeee~!");
        MyLayout.addView(et.get(et.size() - 1));
        MyLayout.addView(ct.get(ct.size() -1));
        MyLayout.addView(tv.get(tv.size() - 1));
        MyLayout.addView(cb.get(cb.size() - 1));

        this.setContentView(sv);

        et.get(last_added).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(int i=0;i<et.size();i++)
            {
                if(et.get(i) == v)
                {
                    last_added = i + 1;
                    break;
                }
            }

            if(isWaiting) {
                isWaiting = false;
                timer.cancel();
                // TODO: open a new EditText
                if(ct.get(last_added -1).isShown())
                {
                    ct.get(last_added -1).setVisibility(View.INVISIBLE);
                }
                else

                {
                    ct.get(last_added -1).setVisibility(View.VISIBLE);
                }


                }
            else {
                        isWaiting = true;
                        timer.start();
                    }
                }
            });
        last_added++;
        return true;
    }

    else if (id == R.id.action_delete) {
        num_removed = 0;
        btn.setVisibility(View.VISIBLE);
        for (int i = 0; i < cb.size(); i++) {
            cb.get(i).setVisibility(View.VISIBLE);
        }
        btn.setOnClickListener(new View.OnClickListener() {
            int checked =0;
            @Override
            public void onClick(View v) {
                while(true)
                {
                    for(int j=0;j< cb.size();j++)
                    {
                        if(cb.get(j).isChecked())
                        {
                            checked++;
                        }

                    }
                    if(checked == 0)
                    {
                        break;
                    }
                    for(int i=0;i<cb.size();i++)
                    {
                        if(cb.get(i).isChecked())
                        {
                            et.get(i).setVisibility(View.GONE);
                            tv.get(i).setVisibility(View.GONE);
                            ct.get(i).setVisibility(View.GONE);
                            cb.get(i).setVisibility(View.GONE);
                            et.remove(i);
                            tv.remove(i);
                            ct.remove(i);
                            cb.remove(i);
                            last_added--;
                        }
                    }
                    checked = 0;
                }

                btn.setVisibility(View.INVISIBLE);
                for (int i = 0; i < cb.size(); i++) {
                    cb.get(i).setVisibility(View.INVISIBLE);
                }
            }
        });

        this.setContentView(sv);

        return true;
    }
    else if (id == R.id.action_search) {
        btn.setVisibility(View.VISIBLE);
        for (int i = 0; i < cb.size(); i++) {
            cb.get(i).setVisibility(View.VISIBLE);
        }

        return true;
    }

    else if (id == R.id.action_send)
    {


        btn.setVisibility(View.VISIBLE);

        for (int i = 0; i < cb.size(); i++)
        {
            cb.get(i).setVisibility(View.VISIBLE);
            cb.get(i).setChecked(false);
        }
        btn.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                String [] to = new String[]{};

                for(int j=0; j < cb.size();j++)
                {
                    if(cb.get(j).isChecked())
                    {
                        sendEmail(et.get(j).getText().toString(),ct.get(j).getText().toString());
                    }

                }
                btn.setVisibility(View.INVISIBLE);
                for (int i = 0; i < cb.size(); i++)
                {
                    cb.get(i).setVisibility(View.INVISIBLE);
                }
        }});

        this.setContentView(sv);

        return true;
    }
    return super.onOptionsItemSelected(item);
}




protected void sendEmail(String subject,String Context)
{

    Intent emailIntent = new Intent(Intent.ACTION_SEND);

    emailIntent.putExtra(Intent.EXTRA_SUBJECT,subject);
    emailIntent.putExtra(Intent.EXTRA_TEXT,Context);
    emailIntent.setType("message/rfc822");
    startActivity(Intent.createChooser(emailIntent,"Email"));
}
private LinearLayout MyLayout;
私有滚动视图sv;
private List et=new ArrayList();
私有列表ct=newarraylist();
private List tv=new ArrayList();
私有列表cb=新的ArrayList();
专用按钮btn;
最终上下文=此;
私人倒计时;
我在等待;
最后添加的int;
移除int num_;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_主页);
最后添加的_=0;
//btn=(按钮)findViewById(R.id.btn);
//btn.setVisibility(视图不可见);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.menu\u主页,菜单);
sv=新的滚动视图(此);
MyLayout=新的线性布局(本);
MyLayout.setOrientation(线性布局.垂直);
sv.addView(MyLayout);
计时器=新的倒计时计时器(500500){
@凌驾
公共void onTick(长毫秒未完成){
}
@凌驾
公共无效onFinish(){
isWaiting=false;
}
};
btn=新按钮(此按钮);
btn.setText(“接受”);
btn.setVisibility(视图不可见);
MyLayout.addView(btn);
///搜索狗屎
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
else if(id==R.id.action