2
我寫了一個關於購物的簡單測試代碼。就像在圖片中。 add from right to left如何在Android中定製適配器之間進行正確的交互?
很簡單。 ListViews顯示'Item's。 '項目'只有名字和數量。在右側,我改變計數並將物品添加到左側的購物車。
重點是在這裏,當我更改之前添加的物品數量並再次將物品添加到購物車時,購物車和菜單中的所有物品都會變爲最後一個物品。
拍完第一張照片後,我改變了相同的物品數量並重新添加。所以,購物車中的兩件物品的最後一個計數相同。我無法理解代碼中的錯誤。 Second screenshot after added the same item with different count
在此先感謝。
我找到了關於代碼的東西。所有的ArrayList都像靜態一樣工作。如果我更改添加按鈕的onclick metot菜單爲:
ImageButton ekle = (ImageButton) view.findViewById(R.id.imageButton2);
ekle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//After changing this row, all the ArrayList's (menu and cart) items
//in this position is changing to the same number 5.
//And I delete the EditText's TextChangeListener, as well.
menu.get(position).setCount(5);
((BaseAdapter) context.list1.getAdapter()).notifyDataSetChanged();
}
});
public class Item {
private String name;
private int count;
public Item(String s, int i) {
name = s;
count = i;
}
public String getName() {return name;}
public int getCount() {return count;}
public void setName(String s) {name = s;}
public void setCount(int i) {count = i;}
}
public class MainActivity extends AppCompatActivity {
ListView list1;
ListView list2;
static ArrayList<Item> menu = new ArrayList<>();
static ArrayList<Item> cart = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
menu.add(new Item("Item1", 1));
menu.add(new Item("Item2", 1));
menu.add(new Item("Item3", 1));
menu.add(new Item("Item4", 1));
menu.add(new Item("Item5", 1));
list1 = (ListView) findViewById(R.id.list1);
list1.setAdapter(new CartAdapter(this, cart));
list2 = (ListView) findViewById(R.id.list2);
list2.setAdapter(new MenuAdapter(this, menu));
}
}
public class CartAdapter extends BaseAdapter {
MainActivity context;
ArrayList<Item> cart;
public CartAdapter(Activity activity, ArrayList<Item> m) {
context = (MainActivity) activity;
cart = m;
}
@Override
public int getCount() {
return cart.size();
}
@Override
public Object getItem(int position) {
return cart.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_list, null);
TextView name = (TextView) view.findViewById(R.id.textView);
name.setText(cart.get(position).getName());
EditText count = (EditText) view.findViewById(R.id.editText);
count.setText("" + cart.get(position).getCount());
return view;
}
}
public class MenuAdapter extends BaseAdapter {
MainActivity context;
ArrayList<Item> menu;
public MenuAdapter(Activity activity, ArrayList<Item> m) {
context = (MainActivity) activity;
menu = m;
}
@Override
public int getCount() {
return menu.size();
}
@Override
public Object getItem(int position) {
return menu.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_list2, null);
ImageButton ekle = (ImageButton) view.findViewById(R.id.imageButton2);
ekle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.cart.add(menu.get(position));
((BaseAdapter) context.list1.getAdapter()).notifyDataSetChanged();
}
});
TextView name = (TextView) view.findViewById(R.id.textView2);
name.setText(menu.get(position).getName());
EditText miktar = (EditText) view.findViewById(R.id.editText2);
miktar.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (count != 0) {
int i = Integer.parseInt(s.toString());
Item item = menu.get(position);
item.setCount(i);
MainActivity.menu.set(position, item);
CharSequence text = menu.get(position).getName() +" : "+ menu.get(position).getCount();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
return view;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
}