getView()
アプリケーションの 1 つのフラグメントでは、アイテムをデータベース (Cart クラス) に追加し、次の方法 (メソッドのみ)でリストビューの editText をキャッチします。
public View getView(int position, View convertView,final ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.layout_product, null);
final Button addToCart = (Button) v.findViewById(R.id.button_addToCart);
addToCart.setTag(position);
addToCart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Fetch product id
int position = (Integer) v.getTag();
// Fetch amount of product
LinearLayout rowLayout = (LinearLayout) v.getParent();
EditText editText_amount = (EditText) rowLayout
.findViewById(R.id.editText_amount);
try {
int amount = Integer.parseInt(editText_amount.getText()
.toString());
String k = Integer.toString(amount);
Toast.makeText(getActivity(),k,Toast.LENGTH_SHORT).show();
Cart.AddToCart(products.get(position), amount);
} catch (NumberFormatException e) {
return;
}
}
Cart クラス (データベース) :
public class Cart {
static HashMap<Integer, JSONObject> products = new HashMap<Integer, JSONObject>();
public static void AddToCart(JSONObject product, int amount) {
int product_id;
try {
product_id = product.getInt("product_id");
product.put("product_id", amount);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
products.put(product_id, product);
}
public static void ExcludeFromCart(JSONObject product, int amount) {
int product_id;
try {
product_id = product.getInt("product_id");
product.put("product_id", amount);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
products.remove(product_id);
}
public static JSONObject[] GetProducts()
{
return products.values().toArray(new JSONObject[products.size()]);
}
}
そして、Cart クラスに追加されたアイテムのリストビューを作成して処理するフラグメント (getView()
メソッドのみ):
public View getView(int position, View convertView,
final ViewGroup parent) {
ViewGroup p=parent;
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.layout_cart, null);
Button remove = (Button) v.findViewById(R.id.remove);
remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Fetch product id
int position = (Integer) v.getTag();
String k = Integer.toString(position);
Toast.makeText(getActivity(),k,Toast.LENGTH_SHORT).show();
// Fetch amount of product
LinearLayout rowLayout = (LinearLayout) v.getParent();
EditText editText_amount = (EditText) rowLayout
.findViewById(R.id.editText_amount_cart);
try {
int amount = Integer.parseInt(editText_amount.getText()
.toString());
Cart.ExcludeFromCart(products.get(position), amount);
v.invalidate();
notifyDataSetChanged();
} catch (NumberFormatException e) {
return;
}
}
});
問題は、時々(常にではなく、もっと奇妙になります)カートに複数のアイテムを追加でき(もちろんそれを避けたい)、削除ボタンを押しても何も起こらないことです(listViewのアイテムはそうではありません削除されました)。あなたの援助に感謝します!