首页 > 解决方案 > 如何更新列表视图的 Java(Android) 数组中的值(简单的购物清单应用程序)

问题描述

我是编程新手,作为乐趣练习,我创建了一个简单的应用程序,该应用程序存储具有预定成分的食谱,用户只需单击每个食谱即可将其放入他/她的购物清单。此外,可以将单个对象添加到列表中。该应用程序目前运行良好,但如果我选择 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

标签: javaandroidarrayslistview

解决方案


当您想添加一种新成分时,您必须首先检查它是否已经存在。如果存在,则更新成分的数量。如果不是,则添加值为 1 的成分。使用HashMap<String, Int>where first String 是您的成分的名称而 Int 是相应的数字怎么样?


推荐阅读