我做了一个 question (已删除)之前,但我认为它非常困惑和难以理解,所以这个问题是关于同样的问题,但比以前更简单。
我做了一个同样情况的示例工程,有以下几项:
- 一个 ArrayList,包含我所有的项目。
- 另一个带有过滤项的 ArrayList。
- 用于过滤项目的集合。
对于我的 Set
中的每个过滤项目,我创建一个新 View 以添加到我的主视图中。这些新 View 有一个 OnClickListener
,理论上可以显示所有已过滤的项目。
问题是当我点击任何 View 时,结果都是一样的。
我的代码:
public class MainActivity extends Activity {
private List<Integer> myList = new ArrayList<Integer>();
private List<Integer> myFinalList;
private Set<Integer> setOfAallCodes = new HashSet<Integer>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myList.add(1);
myList.add(1);
myList.add(1);
myList.add(2);
myList.add(2);
myList.add(2);
listItems();
}
public void listItems() {
myFinalList = new ArrayList<Integer>();
for (Integer element : myList) {
setOfAallCodes.add(element);
}
Object[] arrayOfAllCodes;
arrayOfAllCodes = setOfAallCodes.toArray();
for (Object i : arrayOfAllCodes) {
myFinalList.clear();
int actual = (Integer) i;
for (Integer element : myList) {
if (element == actual) {
myFinalList.add(element);
}
}
LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.button_view, null);
Button btnTest = (Button) v.findViewById(R.id.mega_button);
View insertPoint = findViewById(R.id.conteudo);
((ViewGroup) insertPoint).addView(v);
btnTest.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("Result: " + myFinalList);
}
});
}
}
}
两个按钮的结果是:[2, 2, 2]
怎么了?我该怎么做才能让按钮显示它们的结果?
最佳答案
我试试看。这不足以解决所有问题:
每个 View 都需要一个“myFinalList”,而不是一个全局 View 。现在,您所有的按钮都会打印同一个列表实例的内容。
请详细说明您的“过滤器”应该如何工作。您是否期望以下输出?
View 1 = [1,1,1], View 2 = [2,2,2]
关于java - 将 ArrayList 刷新为 ClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732453/