繁体   English   中英

如何使用Button添加EditText和CheckBox?

[英]How can I add EditText(s) and a CheckBox with a Button?

所以我一直在为自己制作一个小应用程序,因为我意识到使用Microsoft Word来跟踪我完成的所有大学课程,因为我的学位并不理想。 所以我想,为什么不把它作为我的第一个应用程序呢? 这很简单,对于像我这样没有应用经验的人来说,它是可行的。

所以,这是我最初的想法,没什么特别的,只是一些EditText字段和一个CheckBox标记每个课程完成。 注意,实际上有七个,都包含在“ScrollView”中。 这就是我目前所拥有的。

然后我有了不同的想法。 而不是有一定数量的课程和学分EditTexts和CheckBox,我宁愿只有一个“添加课程”的按钮。 我的问题是,我不确定如何实现这一目标。 我还是相当新的编程,到目前为止只采用了两个Java类。

这是我的“MainActivity.java”的代码:

package exporian.collegetracker;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;

import java.lang.reflect.Array;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onCheckBoxChecked(View v) {
        final EditText course1 = (EditText) findViewById(R.id.course1);
        final CheckBox checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
        final EditText credits1 = (EditText) findViewById(R.id.credits1);
        final EditText course2 = (EditText) findViewById(R.id.course2);
        final CheckBox checkBox2 = (CheckBox) findViewById(R.id.checkBox2);
        final EditText credits2 = (EditText) findViewById(R.id.credits2);
        final EditText course3 = (EditText) findViewById(R.id.course3);
        final CheckBox checkBox3 = (CheckBox) findViewById(R.id.checkBox3);
        final EditText credits3 = (EditText) findViewById(R.id.credits3);
        final EditText course4 = (EditText) findViewById(R.id.course4);
        final CheckBox checkBox4 = (CheckBox) findViewById(R.id.checkBox4);
        final EditText credits4 = (EditText) findViewById(R.id.credits4);
        final EditText course5 = (EditText) findViewById(R.id.course5);
        final CheckBox checkBox5 = (CheckBox) findViewById(R.id.checkBox5);
        final EditText credits5 = (EditText) findViewById(R.id.credits5);
        final EditText course6 = (EditText) findViewById(R.id.course6);
        final CheckBox checkBox6 = (CheckBox) findViewById(R.id.checkBox6);
        final EditText credits6 = (EditText) findViewById(R.id.credits6);
        final EditText course7 = (EditText) findViewById(R.id.course7);
        final CheckBox checkBox7 = (CheckBox) findViewById(R.id.checkBox7);
        final EditText credits7 = (EditText) findViewById(R.id.credits7);

        ArrayList<CheckBox> checkBoxes = new ArrayList<>();
        checkBoxes.add(checkBox1);
        checkBoxes.add(checkBox2);
        checkBoxes.add(checkBox3);
        checkBoxes.add(checkBox4);
        checkBoxes.add(checkBox5);
        checkBoxes.add(checkBox6);
        checkBoxes.add(checkBox7);

        ArrayList<EditText> courses = new ArrayList<>();
        courses.add(course1);
        courses.add(course2);
        courses.add(course3);
        courses.add(course4);
        courses.add(course5);
        courses.add(course6);
        courses.add(course7);

        ArrayList<EditText> credits = new ArrayList<>();
        credits.add(credits1);
        credits.add(credits2);
        credits.add(credits3);
        credits.add(credits4);
        credits.add(credits5);
        credits.add(credits6);
        credits.add(credits7);

        int numOfCheckBoxes = 7;
        for (int i = 0; i < numOfCheckBoxes; i++) {
            if (checkBoxes.get(i).isChecked()) {
                courses.get(i).setEnabled(false);
                courses.get(i).setFocusable(false);
                courses.get(i).setInputType(InputType.TYPE_NULL);
                credits.get(i).setEnabled(false);
                credits.get(i).setFocusable(false);
                credits.get(i).setInputType(InputType.TYPE_NULL);
            } else {
                courses.get(i).setEnabled(true);
                courses.get(i).setFocusable(true);
                courses.get(i).setFocusableInTouchMode(true);
                courses.get(i).setInputType(InputType.TYPE_CLASS_TEXT);
                credits.get(i).setEnabled(true);
                credits.get(i).setFocusableInTouchMode(true);
                credits.get(i).setFocusable(true);
                credits.get(i).setInputType(InputType.TYPE_CLASS_NUMBER);
            } // End of if else
        } // End of for loop
    } // End of onCheckBoxChecked
} // End of MainActivity

我意识到我可能认为这是一种非常“非常”的方式,而且我的代码可能会更清晰,但我仍然是Java的新手,甚至更新的Android,所以请耐心等待。

我坚持的最重要的事情是实例化EditTexts和CheckBox。 我该怎么办呢? 我想,对于我的“numOfCheckBoxes”,每次单击“添加课程”按钮时我只会添加1,因此for循环仍然可以正常工作,但是如何为每个新的EditText和CheckBox创建id,例如“course1”,“course2”,“course3”等。

PS我不是在寻找有人为我制作应用程序,也不是为了向我提供所有东西,只是来自比我更有经验的人的一些见解,谢谢大家提前!

首先,您必须创建自己的类,使用水平方向扩展线性布局并添加子视图(编辑文本,文本文本,复选框),这将允许您创建包含视图的1个实例所有3个视图。

例如 :

public class MySingleLineInList extends LinearLayout {

public MySingleLineInList(Context context) {
    super(context);

      setOrientation(LinearLayout.HORIZONTAL);

      EditText courseET = new EditText(context);
      EditText creditsET = new EditText(context);
      CheckBox complteCB = new CheckBox(context);

      addView(courseET);
      addView(creditsET);
      addView(complteCB);
}
}

然后你必须使用ListView(也包括滚动)和listview适配器来显示你的视图(MySingleLineInList),点击按钮你可以添加更多的视图到这个列表:

ListView myListView = new ListView(context);

MyListArrayAdaptapter myAdapter = new MyListArrayAdaptapter(context);

myListView.setAdapter(myAdapter);



public class MyListArrayAdaptapter extends ArrayAdapter<MySingleLineInList> {

    public MyListArrayAdaptapter(Context context){
          super(context, android.R.layout.simple_spinner_item);
    }

    public void addViewToList(MySingleLineInList l){
        add(l);
        notifyDataSetChanged();
    }
}

然后在按钮上单击使用:

Button b = new Button(context);
      b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            myAdapter.addViewToList(new MySingleLineInList());

        }
    });

请注意这只是这样做的概念,有关列表视图及其工作原理的更多信息,请阅读:

http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67&aaid=92

或者只是谷歌的自定义列表视图。

  • 关于id的事情,你可以将id设置为android中的任何视图供以后使用,例如:

      MySingleLineInList demo = new MySingleLineInList(context); demo.setId(1); int thisCourseId = demo.getId(); 

你可以像这样动态创建一个EditText -

    int counter = 1;
    final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    final EditText edit_text = new EditText(this);
    edit_text.setId(counter++);
    edit_text.setLayoutParams(lparams);

并将其添加到您的父布局。

yourParentLayout.addView(edit_text);

类似地,你可以为CheckBox做。

您应该使用RecyclerView来显示对象列表。 看看这个例子。

然后,只要您想添加新课程,只需创建一个新的“课程”对象并将其添加到dataSet数组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM