如何为列表视图更新Java(Android)数组中的值(简单的购物清单应用)

时间:2018-08-23 17:22:33

标签: java android arrays listview

我是编程的新手,为了娱乐,我创建了一个简单的应用程序,用于存储具有预定配料的食谱,用户只需单击一下即可将其放入购物清单。同样,可以将单个对象添加到列表中。该应用程序目前可以正常工作,但是例如,如果我选择3个包含“牛奶”的食谱,则牛奶会在列表中出现3次。显然,最好在一行上显示Milk x 3。我已经寻找了好几个小时没有运气的解决方案。

这是我从菜单列表中添加(和排序)配料,牛奶和饼干的方法:

if(id == R.id.action_milkAndCookies) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Milk and cookies");
        builder.setPositiveButton("Add to list", new 
         DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Collections.addAll(shoppingList, "Milk", "Cookies");
                Collections.sort(shoppingList);
                storeArrayVal(shoppingList, getApplicationContext());
                lv.setAdapter(adapter);
            }
        });

OnCreate方法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    shoppingList = getArrayVal(getApplicationContext());
    Collections.sort(shoppingList);
    adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, 
shoppingList);
    lv = (ListView) findViewById(R.id.listView);
    lv.setAdapter(adapter);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view, final int 
position, long id) {
            String selectedItem = ((TextView) view).getText().toString();
            if 
(selectedItem.trim().equals(shoppingList.get(position).trim())) {
                removeElement(selectedItem, position);
            } else {
                Toast.makeText(getApplicationContext(),"Can not be removed", 
Toast.LENGTH_LONG).show();
            }
        }
    });

}

输出为:

曲奇饼 饼干 牛奶 牛奶

希望它是

饼干x 2 牛奶x 2

1 个答案:

答案 0 :(得分:0)

当您想添加新成分时,必须首先检查它是否还不存在。如果存在,则更新成分数。如果不是,则添加值1的成分。使用HashMap<String, Int>怎么办,其中第一个String是成分的名称,而Int是对应的数字?