将ArrayList刷新到ClickListener中

时间:2014-02-12 15:38:42

标签: java android arraylist

我以前做过question(已删除),但我觉得它很混乱,很难理解,所以这个问题是关于同样的问题,但比以前简单。

我做了一个具有相同情况的示例项目,有以下项目:

  • 一个ArrayList,包含我的所有项目。
  • 另一个带有filtred项的ArrayList。
  • 设置过滤项目。

对于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]

有什么问题?我该怎么做才能让按钮显示结果?

2 个答案:

答案 0 :(得分:1)

我会试一试。这对于所有问题都是不够的:

  1. 每个视图需要一个“myFinalList”,而不是一个全局视图。现在,所有按钮都会打印同一个列表实例的内容。

  2. 请详细说明您的“过滤器”应该如何工作。您是否期望以下输出?

  3.   

    查看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();
            }       
        });
    }
}

}