0

我有一个从几个按钮的 onClick 填充的 ArrayList。我试图弄清楚如何让我的 ArrayList 将类似的项目组合成一个项目。用户按下按钮一次,列表中将填充“1 不管”。如果他们再次按下相同的按钮,它将在列表中再次显示“1whatever”然后“1whatever”。如果按钮被按下两次,我如何让我的列表显示“2whatever”?

ArrayList<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;

//Regular List
adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,listItems);
setListAdapter(adapter);

//List From Another Activity
ArrayList<String> ai= new ArrayList<String>();
ai = getIntent().getExtras().getStringArrayList("list");
if (ai != null) {
listItems.add(ai+"");
adapter.notifyDataSetChanged();
}

//When the User pushes this button
//StackOverFlow help, Ignore this part if it's useless...wasnt sure
lay1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
listItems.add("1 "+stringm1a+" - "+intm1aa );
adapter.notifyDataSetChanged();
overallTotalproduct =  intm1aa + overallTotalproduct;
            textViewtotalproduct.setText(String.valueOf(overallTotalproduct));
        }
    });
4

2 回答 2

1

我强烈建议将项目计数与项目名称分开,而不是将两个值都存储在字符串中,并使用您自己的自定义对象适配器。这将比使用字符串容易得多。

但是,我认为这应该有效:

String item = "1 Whatever";

// If the list contains this String
if (listItems.contains(item)) {
    String[] words = item.split(" ");        // Split the count and name
    int count = Integer.parseInt(words[0]);  // Parse the count into an int
    count++;                                 // Increment it
    listItems.remove(item);                  // Remove the original item
    listItems.add(count + " " + words[1]);   // Add the new count + name eg "2 Whatever"
}

缺点是这不会保留您的列表顺序,但您始终可以Collections.sort()在任何修改后对其进行排序。

于 2013-06-18T07:03:12.803 回答
1

如果我理解正确,您有一个 ArrayList,您可以在其中添加单击几个按钮时的项目,如果单击同一按钮两次或更多次,您不想添加项目,而是增加列表中存在的项目数。

为了解决这个问题,您可以定义一个 Item 类,它具有类成员 String ,您可以使用它来识别项目和跟踪点击次数的计数

class Item
{
String str;
int count; 
}

然后在每个 Button 上,定义 String ,在将元素添加到 ArrayList 之前,搜索 String 如果它已经存在于 List 中,如果找到 String 则增加计数

于 2013-06-18T07:10:09.723 回答