05_学生管理系统,xml读写,布局的综合应用
最終要做的項目目標:
?
2、編寫Android清單文件AndroidManifest.xml
| <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ??? package="com.itheima27.sutdentmanager" ??? android:versionCode="1" ??? android:versionName="1.0" > ? ??? <uses-sdk ??????? android:minSdkVersion="8" ??????? android:targetSdkVersion="19" /> ??? <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ? ??? <application ??????? android:allowBackup="true" ??????? android:icon="@drawable/ic_launcher" ??????? android:label="@string/app_name" ??????? android:theme="@style/AppTheme" > ??????? <activity ??????????? android:name="com.itheima27.sutdentmanager.MainActivity" ??????????? android:label="@string/app_name" > ??????????? <intent-filter> ??????????????? <action android:name="android.intent.action.MAIN" /> ? ??????????????? <category android:name="android.intent.category.LAUNCHER" /> ??????????? </intent-filter> ??????? </activity> ??? </application> ? </manifest> |
3 編寫布局文件activity_main.xml????????????????????????
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ??? android:layout_width="match_parent" ??? android:layout_height="match_parent" ??? android:background="@android:color/white" ??? android:orientation="vertical" > ? ??? <TextView ??????? android:layout_width="wrap_content" ??????? android:layout_height="wrap_content" ??????? android:layout_gravity="center_horizontal" ??????? android:layout_marginTop="5dip" ??????? android:text="學生管理系統" ??????? android:textColor="#99CCFF" ??????? android:textSize="23sp"/> ??? ??? <RelativeLayout ??????? android:layout_width="fill_parent" ??????? android:layout_height="wrap_content" ??????? android:layout_marginTop="5dip" ??????? android:padding="5dip"> ??????? ??????? <TextView ??????????? android:id="@+id/tv_name" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:paddingLeft="15dip" ??????????? android:paddingRight="15dip" ??????????? android:text="姓名" ??????????? android:textSize="18sp" /> ??????? ??????? <TextView ??????????? android:id="@+id/tv_sex" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_marginLeft="5dip" ??????????? android:layout_toRightOf="@id/tv_name" ??????????? android:paddingLeft="15dip" ??????????? android:paddingRight="15dip" ??????????? android:text="性別" ??????????? android:textSize="18sp" /> ??????? ??????? <TextView ??????????? android:id="@+id/tv_age" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_marginLeft="5dip" ??????????? android:layout_toRightOf="@id/tv_sex" ??????????? android:paddingLeft="15dip" ??????????? android:paddingRight="15dip" ??????????? android:text="年齡" ??????????? android:textSize="18sp" /> ??????? ??????? <!-- 在姓名的下面 --> ??????? <EditText ??????????? android:id="@+id/et_name" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_alignLeft="@id/tv_name" ??????????? android:layout_alignRight="@id/tv_name" ??????????? android:layout_below="@id/tv_name" ??????????? android:singleLine="true" /> ??????? ??????? <!-- 在性別的下面 --> ??????? <EditText ??????????? android:id="@+id/et_sex" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_alignLeft="@id/tv_sex" ??????????? android:layout_alignRight="@id/tv_sex" ??????????? android:layout_below="@id/tv_sex" ??????????? android:singleLine="true" /> ??????? ??????? <EditText ??????????? android:id="@+id/et_age" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_alignLeft="@id/tv_age" ??????????? android:layout_alignRight="@id/tv_age" ??????????? android:layout_below="@id/tv_age" ??????????? android:inputType="number" ??????????? android:singleLine="true" /> ??????? ??????? <Button ??????????? android:id="@+id/btn_add_student" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_alignBaseline="@id/et_age" ??????????? android:layout_toRightOf="@id/et_age" ??????????? android:text="添加學生" ??????????? android:textSize="20sp" /> ??? </RelativeLayout> ??? ??? <ScrollView ??????? android:layout_width="fill_parent" ??????? android:layout_height="wrap_content" ??????? android:layout_weight="1" > ? ??????? <LinearLayout ??????????? android:id="@+id/ll_student_list" ??????????? android:layout_width="fill_parent" ??????????? android:layout_height="fill_parent" ??????????? android:layout_margin="1dip" ??????????? android:orientation="vertical" ??????????? android:padding="5dip" > ??????? </LinearLayout> ??? </ScrollView> ??? ??? <LinearLayout ??????? android:layout_width="fill_parent" ??????? android:layout_height="wrap_content" ??????? android:layout_marginTop="5dip" ??????? android:orientation="horizontal" > ??????? ??????? <Button ??????????? android:id="@+id/btn_save" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_weight="1" ??????????? android:text="保存數據" ??????????? android:textSize="20sp" /> ? ??????? <Button ??????????? android:id="@+id/btn_restore" ??????????? android:layout_width="wrap_content" ??????????? android:layout_height="wrap_content" ??????????? android:layout_weight="1" ??????????? android:text="恢復數據" ??????????? android:textSize="20sp" /> ??? </LinearLayout> </LinearLayout> |
4 編寫Student實體
| package com.itheima27.sutdentmanager.entities; ? public class Student { ??? private String name; ??? private String sex; ??? private Integer age; ? ??? public Student() { ?????? super(); ??? } ??? public Student(String name, String sex, Integer age) { ?????? super(); ?????? this.name = name; ?????? this.sex = sex; ?????? this.age = age; ??? } ??? public String getName() { ?????? return name; ??? } ??? public void setName(String name) { ?????? this.name = name; ??? } ??? public String getSex() { ?????? return sex; ??? } ??? public void setSex(String sex) { ?????? this.sex = sex; ??? } ??? public Integer getAge() { ?????? return age; ??? } ??? public void setAge(Integer age) { ?????? this.age = age; ??? } ??? @Override ??? public String toString() { ?????? return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]"; ??? } } |
5 編寫MainActivity
| package com.itheima27.sutdentmanager; ? import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; ? import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; ? import android.graphics.Color; import android.os.Bundle; import android.os.Environment; import android.support.v7.app.ActionBarActivity; import android.text.TextUtils; import android.util.Xml; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; ? import com.itheima27.sutdentmanager.entities.Student; ? public class MainActivity extends ActionBarActivity implements OnClickListener { ? ??? private EditText etName; ??? private EditText etSex; ??? private EditText etAge; ??? private LinearLayout llStudentList; ??? private List<Student> studentList; ??? private String filePath; ??? ??? @Override ??? protected void onCreate(Bundle savedInstanceState) { ?????? super.onCreate(savedInstanceState); ?????? setContentView(R.layout.activity_main); ??? ?????? init(); ??? } ??? ??? private void init() { ?????? etName = (EditText) findViewById(R.id.et_name); ?????? etSex = (EditText) findViewById(R.id.et_sex); ?????? etAge = (EditText) findViewById(R.id.et_age); ?????? ?????? llStudentList = (LinearLayout) findViewById(R.id.ll_student_list); ? ?????? findViewById(R.id.btn_save).setOnClickListener(this); ?????? findViewById(R.id.btn_restore).setOnClickListener(this); ?????? findViewById(R.id.btn_add_student).setOnClickListener(this); ?????? ?????? studentList = new ArrayList<Student>(); ?????? filePath = Environment.getExternalStorageDirectory().getPath() + "/student.xml"; ??? } ? ??? public void onClick(View v) { ?????? switch (v.getId()) { ?????? case R.id.btn_save: ?????????? if(studentList.size() > 0) { ????????????? //將信息寫到xml文件中 ????????????? if(saveStudent2Local()) { ????????????????? Toast.makeText(this, "保存成功", 0).show(); ????????????? } else { ????????????????? Toast.makeText(this, "保存失敗", 0).show(); ????????????? } ?????????? } else { ????????????? Toast.makeText(this, "當前沒有數據", 0).show(); ??? ??? ??? } ?????????? break; ?????????? ?????? case R.id.btn_restore: ?????????? if(restoreStudentFromLocal()) { ????????????? Toast.makeText(this, "恢復成功", 0).show(); ?????????? } else { ????????????? Toast.makeText(this, "恢復失敗", 0).show(); ?????????? } ?????????? break; ?????? case R.id.btn_add_student: ?????????? addStudent(); ?????????? break; ?????? default: ?????????? break; ?????? } ??? } ??? ??? /** ??? ?* 從xml中讀出Student數據 ??? ?* @return ??? ?*/ ??? private boolean restoreStudentFromLocal() { ?????? try { ?????????? XmlPullParser parser = Xml.newPullParser(); ?????????? parser.setInput(new FileInputStream(filePath), "utf-8"); ?????????? ?????????? int eventType = parser.getEventType(); ?????????? ?????????? studentList.clear(); ?????????? ?????????? Student student = null; ?????????? String nodeName = null; ?????????? while(eventType != XmlPullParser.END_DOCUMENT) { ????????????? nodeName = parser.getName(); ????????????? switch (eventType) { ????????????? case XmlPullParser.START_TAG: ????????????????? if("student".equals(nodeName)) { ???????????????????? student = new Student(); ????????????????? } else if("name".equals(nodeName)) { ???????????????????? student.setName(parser.nextText()); ????????????????? } else if("sex".equals(nodeName)) { ???????????????????? student.setSex(parser.nextText()); ????????????????? } else if("age".equals(nodeName)) { ????????????????? ??? student.setAge(Integer.valueOf(parser.nextText())); ????????????????? } ????????????????? break; ????????????? case XmlPullParser.END_TAG: ????????????????? if("student".equals(nodeName)) { ???????????????????? studentList.add(student); ????????????????? } ????????????????? break; ????????????? default: ????????????????? break; ????????????? } ????????????? eventType = parser.next(); ?????????? } ?????????? refreshStudentList(); ?????????? ?????????? return true; ?????? } catch (Exception e) { ?????????? e.printStackTrace(); ?????? } ?????? return false; ??? } ??? ??? /** ??? ?* 恢復student的List列表 ??? ?*/ ??? private void refreshStudentList() { ?????? llStudentList.removeAllViews(); ?????? TextView childView; ?????? for (Student student : studentList) { ?????????? childView = new TextView(this); ?????????? childView.setTextSize(23); ?????????? childView.setTextColor(Color.BLACK); ?????????? childView.setText(" " + student.getName() + " " + student.getSex() + " " + student.getAge()); ?????????? llStudentList.addView(childView); ?????? } ??? } ??? ??? private boolean saveStudent2Local() { ?????? try { ?????????? XmlSerializer serializer = Xml.newSerializer(); ?????????? serializer.setOutput(new FileOutputStream(filePath), "utf-8"); ?????????? ?????????? serializer.startDocument("utf-8", true); ?????????? serializer.startTag(null, "infos"); ?????????? for (Student stu : studentList) { ????????????? serializer.startTag(null, "student"); ????????????? ????????????? serializer.startTag(null, "name"); ????????????? serializer.text(stu.getName()); ????????????? serializer.endTag(null, "name"); ? ????????????? serializer.startTag(null, "sex"); ????????????? serializer.text(stu.getSex()); ????????????? serializer.endTag(null, "sex"); ? ????????????? serializer.startTag(null, "age"); ????????????? serializer.text(String.valueOf(stu.getAge())); ????????????? serializer.endTag(null, "age"); ????????????? ????????????? serializer.endTag(null, "student"); ?????????? } ?????????? serializer.endTag(null, "infos"); ?????????? serializer.endDocument(); ?????????? return true; ?????? } catch (Exception e) { ?????????? e.printStackTrace(); ?????? } ?????? return false; ??? } ? ??? private void addStudent() { ?????? String name = etName.getText().toString(); ?????? String sex = etSex.getText().toString(); ?????? String age = etAge.getText().toString(); ?????? ?????? if(!TextUtils.isEmpty(name) ????????????? && !TextUtils.isEmpty(sex) ????????????? && !TextUtils.isEmpty(age)) { ?????????? studentList.add(new Student(name, sex, Integer.valueOf(age))); ?????????? TextView childView = new TextView(this); ?????????? childView.setTextSize(23); ?????????? childView.setTextColor(Color.BLACK); ?????????? childView.setText(" " + name + " " + sex + " " + age); ?????????? llStudentList.addView(childView); ?????? } else { ?????????? Toast.makeText(this, "請正確輸入", 0).show(); ?????? } ??? } } |
?
總結
以上是生活随笔為你收集整理的05_学生管理系统,xml读写,布局的综合应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 烫伤用什么药最好得快(烫伤用什么药最好)
- 下一篇: 新冠紫外线灯消毒时间(紫外线灯消毒时间)