1

这是我正在研究的一个更简单的版本。当按下添加按钮时,应该会创建一个 LinearLayout 并使用 EditText 框中的文本创建一个 CheckBox。CheckBox 然后被放置到新创建的LinearLayout 中,新创建的LinearLayout 放置在已经存在的LinearLayout(命名布局)中。我知道创建一个新的 LinearLayout 似乎没有必要,但在主程序中,它真的很重要。我的问题是,当我运行代码时,应用程序“强制关闭”,所以我想知道我做错了什么,或者是否有更好的方法可以达到我需要的结果。

package co.cc.*******.toDo;

import co.cc.*******.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.*;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;

public class ToDoMainActivity extends Activity implements View.OnClickListener{
    /** Called when the activity is first created. */
    Button bAdd,bremove;
    EditText et;
   // CheckBox cbNew;
    LinearLayout layout;//main layout
    ArrayList<CheckBox> cbNew;//dynamic array of checkBoxes
    ArrayList<LinearLayout> cbLayout;//dynamic array of LinearLayouts
    int index = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initialize();

        bAdd.setOnClickListener(this);
        bremove.setOnClickListener(this);
    }//end method onCreate

    void initialize(){
        bAdd = (Button)findViewById(R.id.bAdd);
        bremove = (Button)findViewById(R.id.bremove);
        et = (EditText)findViewById(R.id.et);
        layout = (LinearLayout)findViewById(R.id.layout);
        cbNew = new ArrayList<CheckBox>();

    }//end method initialize

    public void onClick(View v) {
        // TODO Auto-generated method stub



        switch (v.getId())
        {
        case R.id.bAdd:
            cbLayout.add(index, new LinearLayout(this));//create new layout to store cb
            cbNew.add(index, new CheckBox(this));//create new checkbox
            cbNew.get(index).setText(et.getText().toString()+ index);//set text to text in editText box
            cbLayout.get(index).addView(cbNew.get(index));//add checkbox to newly created layout
            layout.addView(cbLayout.get(index));//add newly created layout to already existing layout
            index ++;
            break;

        }//end switch

                //layout.removeView(cbNew.get(index));

    }//end method onClick

}//end class ToDoMainActivity
4

0 回答 0