安卓关于EditText的简单用法及intent传输ArrayList
-
- EditText的简单用法
- 实例
- 活动
- intent进行ArrayList传递
EditText的简单用法
EditText,文本编辑框,在现实生活中使用很多很多,比如登入页面的账号密码输入框,打电话时输入电话号码,发邮件写的邮箱,而Android Studio又仔细对这些进行细分(很实用),比如一般的文字编辑框,使用Plain Text,一些可见数字用Number,一些不可见数字字符集合用Password,需求不同,显示方式也不同,放张图,就不一一说了。

实例
这里来一个实例,写一个学生的姓名,年龄,性别并显示出来,使用LinearLayout布局,三个编辑框都一样,直接复制粘贴改一下就行了,为了节省空间我这里就放一个,xml代码如下。
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:hint="@string/name"
android:text="" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="" />
values下的strings添加:
<string name="name">姓名</string>
ems属性表示的是编辑框的长度占几个字符。
inputType表示编辑框类型。
hint属性是在用户还没有输入的时候进行的半透明提示
这是XML的效果图:
活动
接下来写活动,要达到用户写完提交以后显示出来。
先将EditText、Button、textView作为私有的全局变量,方便后面的使用,用findViewById()通过id号找到对应的控件,都是一样的方法,写完一个直接copy成下一个
public class MainActivity extends Activity {
private Button button1;
private Button button2;
private Button button3;
EditText editText1;
EditText editText2;
EditText editText3;
TextView textView1;
TextView textView2;
TextView textView3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1=findViewById(R.id.button1);
button2=findViewById(R.id.button2);
editText1=findViewById(R.id.editText1);
editText2=findViewById(R.id.editText2);
editText3=findViewById(R.id.editText3);
textView1=findViewById(R.id.textView1);
textView2=findViewById(R.id.textView2);
textView3=findViewById(R.id.textView3);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//参数为(名字,模式),MODE_PRIVATE为默认模式,代表该文件是私有数据,只能被应用本身
访问,在该模式下写入的内容会覆盖原文件的内容。
//除了这种模式还有MODE_WORLD_REDABLE(可以被其他应用读取)
//安卓为了应用共享安全,这样的方法已经行不通了
SharedPreferences.Editor
editor=getSharedPreferences("cong",MODE_PRIVATE).edit();
editor.putString("name",editText1.getText().toString());
//这里要进行类型转换
editor.putInt("age",Integer.parseInt(editText2.getText().toString()));
editor.putString("sex",editText3.getText().toString());
editor.apply();//无返回值
editor.commit();//直接提交一个返回值,这是同步存储的方式
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences pref=getSharedPreferences("cong",MODE_PRIVATE);
//根据key获取值,后面为默认值
String name=pref.getString("name","");
int age=pref.getInt("age",0);
String str=age+"";
String sex=pref.getString("sex","");
//写入到textview中
textView1.setText(name);
textView2.setText(str);
textView3.setText(sex);
}
});
}}
效果图:
intent进行ArrayList传递
以上就是Editor的简单用法了
下面讲讲,如何用intent进行ArrayList传递,当我们的编辑框要反复使用并进行数据的记录时前面的方法就不好用了。
1、在XML中新添加一个按钮
2、新建一个空白的活动,并在XML中添加一个ListView,同样是LinearLayout布局
```css
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3、新建一个学生类并添加Serializable接口。(为什么要序列化后面会用到)
学生的属性有name(名字),age(年龄),sex(性别)。,对着三个进行get、set、构造方法、toString方法生成。
public class Student implements Serializable {
String name; int age; String sex;
@Override public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' + '}'; }
public Student() { }
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSex() { return sex; }
public void setSex(String sex) { this.sex = sex; }}
4、修改刚才的代码,将不用的注释掉。
全局添加:
//按钮3
private Button button3;
//student的ArrayList集合
ArrayList<Student> students=new ArrayList();
//新建一个学生对象
Student student=new Student();
//onCreate添加:
button3=findViewById(R.id.button3);
//按钮1(提交)的监听事件改为:
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//对student进行三个属性的赋值
student=new Student(editText1.getText().toString(),Integer.parseInt(editText2.getText().toString()),editText3.getText().toString());
// 提交
students.add(student);
//提交完以后进行清空
editText1.setText("");
editText2.setText("");
editText3.setText("");
}
});
//按钮2(显示)的全部注释
//添加按钮三的监听事件:
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//从主活动传到刚才新建的界面
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
Bundle bundle=new Bundle();
//因为传的是一个ArrayList数组,所以使用bundle并进行序列化
bundle.putSerializable("students",students);
intent.putExtras(bundle);
startActivity(intent);
}
});
//然后修改Main2Activity的界面:
ublic class Main2Activity extends AppCompatActivity {
String[] str={"","","","","","","","","",""};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//这里可能会发送数据传输异常所以要进行try catch
try {
//获取Intent
Bundle bundle=getIntent().getExtras();
//用一个ArrayList<泛型>接收它,发送的是序列化的ArrayList,接收也要用getSerializable
ArrayList<Student> s=(ArrayList<Student>) bundle.getSerializable("students");
//如果能成功接收到就显示成功,如果能进行到这一行说明数据成功接收
Toast.makeText(Main2Activity.this,"成功",Toast.LENGTH_SHORT).show();
//用一个循环对数组进行赋值
for(int i=0;i<s.size();i++){
String string=i+1+"、"+s.get(i).getName()+" "+"年龄:"+s.get(i).getAge()+" "+"性别:"+s.get(i).getSex();
str[i]=string;
}
//生成适配器
ArrayAdapter<String> adapter=new ArrayAdapter(Main2Activity.this,android.R.layout.simple_list_item_1,str);
ListView listView=findViewById(R.id.listview);
//最后进行适配就大功告成了
listView.setAdapter(adapter);
}catch (Exception e){
e.printStackTrace();
}
}
}
最终结果是进行多次提交然后数据全都记录下来并显示在ListView中
效果图: