java - 如何添加 EditText(s) 和带有按钮的复选框?

标签 java android android-edittext android-checkbox

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

所以,这是我最初的想法,没什么特别的,只是一些 EditText 字段和一个 CheckBox 来标记每门类(class)已完成。请注意,实际上有七个这样的,都包含在一个“ScrollView”中。 This is what I have currently.

然后我有了不同的想法。与其拥有一定数量的类(class)和学分 EditTexts 和复选框,我宁愿只有一个按钮来“添加类(class)”。我的问题是,我不确定如何实现这一目标。我对编程还很陌生,到目前为止只上过两门 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”,每次单击“添加类(class)”按钮时,我都会向它添加 1,因此 for 循环仍然可以正常工作,但是我将如何为每个新的 EditText 和 CheckBox 创建 id,如“类(class)1”、“类(class)2”、“类(class)3”等

附言我不是要找人为我制作应用程序,也不是要将所有东西交给我,只是想从比我更有经验的人那里得到一些见解,提前谢谢大家!

最佳答案

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

例如:

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(也包括滚动)来显示您的 View (MySingleLineInList),并且在单击按钮时您可以向此列表添加更多 View :

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());

        }
    });

请注意,这只是执行此操作的概念,有关 ListView 及其工作原理的更多信息,请阅读此处:

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

或者只是谷歌自定义 ListView 。

  • 关于 id 的东西,你可以将 id 设置为 android 中的任何 View 以备后用, 例如:

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

关于java - 如何添加 EditText(s) 和带有按钮的复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37311667/

相关文章:

java - Hadoop二级排序复合键compareTo与Custom Sorter比较实现

android - 房间关系插入删除更新和排序

java - java [android] 中小数点后 3 位的 EditText 掩码

android - 负数输入(EditText)得到无符号

java - 转义 JDBCPreparedStatement 参数中的两个单引号

java - token "finally"上的语法错误,删除此 token 并且方法 readStream(InputStream) 未定义类型 ParkActivity

android - 是否可以在 Android 的每个 ListView 项中为删除按钮的出现和消失设置动画?

android - 使 Android Textview 或 EditText 可选择

java - 将 Lombok 与 Java 8 可选字段一起使用。如何使用构建器填充字段

android - 如何从一个 fragment 传递到另一个 fragment