我以前做过question(已删除),但我觉得它很混乱,很难理解,所以这个问题是关于同样的问题,但比以前简单。
我做了一个具有相同情况的示例项目,有以下项目:
对于Set
上的每个过滤项目,我在主视图上添加一个新视图。这些新视图有一个OnClickListener
,理论上可以显示所有过滤的项目。
问题是当我点击任何视图时,结果是一样的。
我的代码:
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]
有什么问题?我该怎么做才能让按钮显示结果?
答案 0 :(得分:1)
我会试一试。这对于所有问题都是不够的:
每个视图需要一个“myFinalList”,而不是一个全局视图。现在,所有按钮都会打印同一个列表实例的内容。
请详细说明您的“过滤器”应该如何工作。您是否期望以下输出?
查看1 = [1,1,1], 查看2 = [2,2,2]
答案 1 :(得分:0)
我做到了!
感谢您的建议,我不得不在ClickListener中进行一些操作。
我的最终代码:
public class MainActivity extends Activity {
private List<Integer> myList = new ArrayList<Integer>();
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() {
for (Integer element : myList) {
setOfAallCodes.add(element);
}
Object[] arrayOfAllCodes;
arrayOfAllCodes = setOfAallCodes.toArray();
for (Object i : arrayOfAllCodes) {
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);
final int atual = (Integer) i;
btnTest.setOnClickListener(new OnClickListener() {
List<Integer> myFinalList = new ArrayList<Integer>();
@Override
public void onClick(View v) {
for (Integer integer : myList) {
if (atual == integer) {
myFinalList.add(integer);
}
}
System.out.println(myFinalList);
myFinalList.clear();
}
});
}
}
}