Trong bài này ta sẽ thiết kế
một ứng dụng như sau
Giao diện trên chỉ có 1
ListView để chứa danh sách các mặt hàng
Mỗi dòng (Item) của ListView
cũng được coi như là 1 View
Trong View có chứa 3
TextView
Để đổ dữ liệu vào 3 TextView
của mỗi Item ta sử dụng ArrayAdapter
Chúng ta bắt đầu tạo ứng dụng:
Tạo mới ứng dụng có tên là
Sales. Cấu trúc Project sẽ như sau:
Class Product
package com.androidtmc.sales.models; /** * Created by minhc_000 on 09/08/2015. */ public class Product { private String ProductName; private String Unit; private double Price; public Product() { ProductName = ""; Unit = ""; Price = 0; } public Product(String pname, String unit, double price) { ProductName = pname; Unit = unit; Price = price; } public String getProductName() { return ProductName; } public void setProductName(String productName) { ProductName = productName; } public String getUnit() { return Unit; } public void setUnit(String unit) { Unit = unit; } public double getPrice() { return Price; } public void setPrice(double price) { Price = price; } }
Class SaleManager
SaleManager.java
package com.androidtmc.sales.models; import java.util.ArrayList; /** * Created by minhc_000 on 12/08/2015. */ public class SaleManager { private ArrayList Products; public SaleManager() { Products = new ArrayList(); } public ArrayList getProducts() { return Products; } public void setProducts(ArrayList products) { Products = products; } public void generateProducts() { Products.clear(); Products.add(new Product("Socola KitKat", "Gói", 42000)); Products.add(new Product("Kẹo dẻo Jelly Bean", "Hộp", 50000)); Products.add(new Product("Bánh kem Icecream Sandwich", "Que", 2000)); Products.add(new Product("Mật ong rừng HoneyComb", "Hũ", 60000)); Products.add(new Product("Bánh mì gừng GingerBread", "Ổ", 10000)); } private static SaleManager saleManager; public static SaleManager get() { if (saleManager == null) saleManager = new SaleManager(); return saleManager; } }
Class này quản lý danh sách
các sản phẩm ta có dùng một danh sách ArrayList. Qua class này cũng giới thiệu
một khái niệm mới là khái niệm singleton. Singleton cho phép thiết lập một đối
tượng toàn cục duy nhất và cho phép sử dụng đối tượng này từ bất cứ chỗ nào
trong chương trình. Ứng dụng Android của chúng ta có 2 activity (activity quản
lý danh sách sản phẩm và activity chỉnh sửa một sản phẩm). Việc sử dụng
singleton giúp 2 activity có thể độc lập truy xuất mô hình dữ liệu.
private static SaleManager saleManager;
public static SaleManager get() {
if (saleManager == null)
saleManager = new SaleManager();
return saleManager;
}
Singleton sử dụng một biến
static (đối tượng toàn cục) và một hàm static get(). Hàm này khởi tạo đối tượng
cục nếu nó chưa được khởi tạo. Từ bất cứ chỗ nào cũng có thể truy xuất hàm
get() để lấy được đối tượng toàn cục này. Ta sẽ xem các sử dụng singleton ở
phần sau. Ngoài ra trong class này ta khai báo hàm generateProducts để khởi tạo
một số dữ liệu mẫu.
Thiết kế giao diện cho màng hình chính
Màng hình chính chỉ có 1 ListView
nên ta sửa như sau (trong file activity_main.xml)
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/lvProducts"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
</LinearLayout>
Adapter Cho Listview
ProductAdapter.java
Hiển thị lên màng hình
package com.androidtmc.sales.Adapter; import android.app.Activity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import com.androidtmc.sales.R; import com.androidtmc.sales.models.Product; import java.text.DecimalFormat; import java.util.ArrayList; /** * Created by minhc_000 on 12/08/2015. */ public class ProductAdapter extends ArrayAdapter{ Activity activity; //activity chứa listview public ProductAdapter(Activity activity, ArrayListproducts) { super(activity, 0, products); this.activity = activity; } //hàm hiện thị từng item lên listview public View getView(int position, View convertView, ViewGroup viewGroup) { //position là vị tri của mỗi item. nó sẽ chạy hết mảng //lấy layout cho từng item if (convertView == null) { LayoutInflater inflater = activity.getLayoutInflater(); convertView = inflater.inflate(R.layout.listitem_product, null); } //lấy các textview trong mỗi view TextView tvProductName = (TextView)convertView .findViewById(R.id.tvProductName); TextView tvUnit = (TextView)convertView.findViewById(R.id.tvUnit); TextView tvPrice = (TextView)convertView .findViewById(R.id.tvPrice); //hiển thị dư liệu lên từng item của listview ở vị trí position Product p = getItem(position); tvProductName.setText(p.getProductName()); tvUnit.setText(p.getUnit()); String s = (new DecimalFormat("#,###.##")).format(p.getPrice()); tvPrice.setText(s); return convertView;//trả về 1 view khi đã thiết đặt xong } }
Hiển thị lên màng hình
Ta chỉnh sửa trong MainActivity.java
MainActivity.java
Source code package com.androidtmc.sales; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ListView; import com.androidtmc.sales.Adapter.ProductAdapter; import com.androidtmc.sales.models.SaleManager; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { ListView lv; ProductAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lvProducts); //Khởi tạo các sản phẩm SaleManager saleManager = SaleManager.get(); saleManager.generateProducts(); //lấy các product từ class saleManager ArrayList products = saleManager.getProducts(); adapter = new ProductAdapter(this, products);//khởi tạo adapter lv.setAdapter(adapter);//hiển lên listview } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
Bài tiếp theo: Thêm sửa xóa item trong ListView
custom listview hay
Trả lờiXóa