使用ListView實現一個簡單的學生資訊展示效果
阿新 • • 發佈:2019-01-26
這篇部落格將介紹一下下圖中的效果的實現方式
實現方式,使用Android Studio建立一個Android工程
1、修改activity_layout.xml中的程式碼
2、新建一個item_listview.xml檔案,用於實現ListView中每個條目的佈局<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.fyt.listviewdemo.MainActivity"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名" android:textSize="25sp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:orientation="vertical"> <TextView android:id="@+id/tv_no" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="學號" /> <TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年齡" /> </LinearLayout> </RelativeLayout>
3、修改MainActivity.java中的程式碼(核心程式碼)
package com.fyt.listviewdemo; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private MyOpenHelper oh; private SQLiteDatabase db; private List<Student> studentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //載入佈局檔案 setContentView(R.layout.activity_main); //建立集合,儲存學生的資訊 studentList = new ArrayList<Student>(); //建立資料庫 createDatabase(); //從資料庫中讀取資料 readDataFromDatabase(); //使用ListView顯示學生的資訊 showStudentData(); } //建立資料庫 public void createDatabase() { //建立幫助器物件 oh = new MyOpenHelper(this, "people.db", null, 1); //建立資料庫物件 db = oh.getWritableDatabase(); } //從資料庫中讀取資料 public void readDataFromDatabase() { Cursor cursor = db.query("student", null, null, null, null, null, null, null); while(cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); int no = cursor.getInt(cursor.getColumnIndex("no")); float cpp = cursor.getFloat(cursor.getColumnIndex("cpp")); float math = cursor.getFloat(cursor.getColumnIndex("math")); float english = cursor.getFloat(cursor.getColumnIndex("english")); Log.d("MainActivity", name + ", " + age + ", " + no + ", " + cpp + ", " + math + ", " + english); //將學生的資訊新增到集合中 Student student = new Student(name, age, no, cpp, math, english); studentList.add(student); } } //使用ListView顯示學生的資訊 public void showStudentData() { //獲得佈局檔案上的ListView控制元件 ListView listView = (ListView)findViewById(R.id.lv); //給ListView設定一個介面卡 listView.setAdapter(new MyAdapter()); } //建立一個繼承自BaseAdapter的內部類 public class MyAdapter extends BaseAdapter { //由系統呼叫,用於設定ListView中條目的個數 @Override public int getCount() { return studentList.size(); } //由系統呼叫,獲取一個View物件,作為ListView的條目 //position:本次getView方法呼叫所返回的View物件,在listView中是處於第幾個條目,那麼position的值就是多少 @Override public View getView(int position, View convertView, ViewGroup parent) { //從集合中獲得學生的資訊 Student student = studentList.get(position); View v = null; //如果ListView中的條目沒有快取 if(convertView == null) { //把佈局檔案填充成一個View物件 v = View.inflate(MainActivity.this, R.layout.item_listview, null); } //ListView中的條目有快取 else { v = convertView; } //設定學生的姓名 TextView tv_name = (TextView) v.findViewById(R.id.tv_name); tv_name.setText(student.getName()); //設定學生的學號 TextView tv_no = (TextView) v.findViewById(R.id.tv_no); tv_no.setText(student.getNo() + ""); //設定學生的年齡 TextView tv_age = (TextView) v.findViewById(R.id.tv_age); tv_age.setText(student.getAge() + ""); return v; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } } }
程式碼中的
//把佈局檔案填充成一個View物件
v = View.inflate(MainActivity.this, R.layout.item_listview, null);
可以改成下面的兩種方式
方式1
//獲取佈局填充器物件
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
//使用佈局填充器填充佈局檔案
v = inflater.inflate(R.layout.item_listview, null);
方式2
//通過系統服務獲得佈局填充器物件
LayoutInflater inflater2 = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
//使用佈局填充器將佈局檔案填充成一個View物件
v = inflater2.inflate(R.layout.item_listview, null);