public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setup Data
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
"OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
"Android", "iPhone", "WindowsMobile" };
ArrayList<Product> list = new ArrayList<Product>();
for (int i = 0; i < values.length; ++i) {
// 假設每樣商品都100元, 預設數量為0
Product product = new Product(values[i], 100, i);
list.add(product);
}
// Create ListView
ListView listView = (ListView)findViewById(R.id.listview);
ListAdapter adapter = new ListAdapter(this, R.layout.product_main,list);
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// Inner Class
public class ListAdapter extends ArrayAdapter<Product> {
Context mContext;
LayoutInflater mInflater;
ArrayList<Product> mProducts;
public ListAdapter(Context context, int resource, ArrayList<Product> products) {
super(context, resource, products);
mContext = context;
mProducts = products;
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
Product product = mProducts.get(position);
// 若convertView尚未創建
if(convertView == null)
{
// 從記憶體建立一個 view
convertView = mInflater.inflate(R.layout.product_main, null);
// 取得editView 然後監聽textChanged
EditText editText = (EditText)convertView.findViewById(R.id.productCount);
editText.addTextChangedListener(new MyTextWatcher(convertView));
}
// Setup data
// 把editText跟product綁在一起
EditText editText = (EditText)convertView.findViewById(R.id.productCount);
editText.setTag(product);
// 顯示產品數量
editText.setText(String.valueOf(product.count));
// 顯示商品名稱
TextView productNameTextView = (TextView)convertView.findViewById(R.id.productName);
productNameTextView.setText(product.getName());
// 顯示商品價格
TextView productPriceTextView = (TextView)convertView.findViewById(R.id.productPrice);
productPriceTextView.setText(String.valueOf(product.getPrice()));
return convertView;
}
}
public class MyTextWatcher implements TextWatcher{
View view;
public MyTextWatcher(View view){
this.view = view;
}
@Override
public void afterTextChanged(Editable s) {
// 取得editText的值
String productCount = s.toString().trim();
//從editView取回product
EditText editText = (EditText) view.findViewById(R.id.productCount);
Product product = (Product) editText.getTag();
if (productCount.matches("")) {
// 如果數值為空則不做任何事情
Log.d("in", "You got empty value.");
}
else{
// 如果有值則改變product count
int count = Integer.parseInt(productCount);
product.count = count;
Log.d("product", "name = "+ product.getName() +", count = " + count);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
}
// 商品物件
public class Product {
private String name; // 名稱
private int price; //價格
public int count; //數量
public Product(String name, int price, int count){
this.setName(name);
this.setPrice(price);
this.count = count;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}