如何添加 EditText(s) 和带有按钮的复选框?
How can I add EditText(s) and a CheckBox with a Button?
所以我一直在为自己开发一个小应用程序,因为我意识到使用 Microsoft Word 来跟踪我为获得学位而完成的所有大学课程并不理想。所以我想,为什么不把它作为我的第一个应用程序呢?这很简单,对于像我这样没有应用程序经验的人来说也是可行的。
所以,这是我最初的想法,没什么特别的,只是一些 EditText 字段和一个 CheckBox 来标记每门课程已完成。请注意,实际上有七个,都包含在 "ScrollView" 中。
然后我有了不同的想法。与其拥有一定数量的课程和学分 EditTexts 和复选框,我宁愿只有一个按钮 "Add A Course"。我的问题是,我不确定如何实现这一目标。我对编程还很陌生,到目前为止只学了两个 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
我意识到我可能已经以非常 "noobish" 的方式解决了这个问题,我的代码可能会更简洁,但我对 Java 还是比较陌生,甚至对Android,所以请多多包涵。
我遇到的最大问题是实例化 EditTexts 和 CheckBox。我该怎么做?我想,对于我的 "numOfCheckBoxes",每次单击 "Add A Course" 按钮时,我都会向它添加 1,因此 for 循环仍然可以正常工作,但是我将如何为每个新的 EditText 创建 id 和CheckBox,如"course1"、"course2, "course3"等
P.S。我不是要找人为我制作应用程序,也不是要将所有东西交给我,只是想听听比我更有经验的人的一些见解,提前谢谢大家!
您可以像这样动态创建一个 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 来显示您的对象列表。查看 this example.
然后,每当您想添加新课程时,只需创建一个新的 "Course" 对象并将其添加到数据集数组即可。
您好,首先您必须创建自己的 class 以水平方向扩展线性布局并向其添加您的子视图(编辑文本、文本文本、复选框),这将允许您创建包含所有 3 个视图的视图的 1 个实例。
例如:
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(也包括滚动)来显示您的视图 (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());
}
});
请注意,这只是执行此操作的概念,有关列表视图及其工作原理的更多信息,请阅读此处:
或者只是 google 用于自定义列表视图。
关于id的东西你可以把id设置到android中的任何视图以备后用,
例如:
MySingleLineInList demo = new MySingleLineInList(context);
demo.setId(1);
int thisCourseId = demo.getId();
所以我一直在为自己开发一个小应用程序,因为我意识到使用 Microsoft Word 来跟踪我为获得学位而完成的所有大学课程并不理想。所以我想,为什么不把它作为我的第一个应用程序呢?这很简单,对于像我这样没有应用程序经验的人来说也是可行的。
所以,这是我最初的想法,没什么特别的,只是一些 EditText 字段和一个 CheckBox 来标记每门课程已完成。请注意,实际上有七个,都包含在 "ScrollView" 中。
然后我有了不同的想法。与其拥有一定数量的课程和学分 EditTexts 和复选框,我宁愿只有一个按钮 "Add A Course"。我的问题是,我不确定如何实现这一目标。我对编程还很陌生,到目前为止只学了两个 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
我意识到我可能已经以非常 "noobish" 的方式解决了这个问题,我的代码可能会更简洁,但我对 Java 还是比较陌生,甚至对Android,所以请多多包涵。
我遇到的最大问题是实例化 EditTexts 和 CheckBox。我该怎么做?我想,对于我的 "numOfCheckBoxes",每次单击 "Add A Course" 按钮时,我都会向它添加 1,因此 for 循环仍然可以正常工作,但是我将如何为每个新的 EditText 创建 id 和CheckBox,如"course1"、"course2, "course3"等
P.S。我不是要找人为我制作应用程序,也不是要将所有东西交给我,只是想听听比我更有经验的人的一些见解,提前谢谢大家!
您可以像这样动态创建一个 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 来显示您的对象列表。查看 this example.
然后,每当您想添加新课程时,只需创建一个新的 "Course" 对象并将其添加到数据集数组即可。
您好,首先您必须创建自己的 class 以水平方向扩展线性布局并向其添加您的子视图(编辑文本、文本文本、复选框),这将允许您创建包含所有 3 个视图的视图的 1 个实例。
例如:
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(也包括滚动)来显示您的视图 (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());
}
});
请注意,这只是执行此操作的概念,有关列表视图及其工作原理的更多信息,请阅读此处:
或者只是 google 用于自定义列表视图。
关于id的东西你可以把id设置到android中的任何视图以备后用, 例如:
MySingleLineInList demo = new MySingleLineInList(context); demo.setId(1); int thisCourseId = demo.getId();