Java 将ArrayList刷新到ClickListener中

Java 将ArrayList刷新到ClickListener中,java,android,arraylist,Java,Android,Arraylist,我以前做过一个(删除的),但我认为它很混乱,很难理解,所以这个问题是关于同样的问题,但比以前简单 我做了一个同样情况的示例项目,有以下几项: 一个ArrayList,包含我的所有项目 另一个包含筛选项的ArrayList 用于筛选项目的集合 对于我的集合上的每个过滤项,我创建一个新视图以添加到我的主视图中。这些新视图有一个OnClickListener,理论上显示所有过滤的项 问题是当我点击任何视图时,结果都是一样的 我的代码: public class MainActivity exten

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

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

  • 一个ArrayList,包含我的所有项目
  • 另一个包含筛选项的ArrayList
  • 用于筛选项目的集合
对于我的
集合
上的每个过滤项,我创建一个新视图以添加到我的主视图中。这些新视图有一个
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);
                }
            });
        }
    }
}
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();
            }       
        });
    }
}
公共类MainActivity扩展活动{
private List myList=new ArrayList();
私人名单myFinalList;
私有集合setOfAallCodes=newHashSet();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
添加(1);
添加(1);
添加(1);
添加(2);
添加(2);
添加(2);
listItems();
}
公共物品清单(){
myFinalList=newArrayList();
for(整型元素:myList){
集合所有代码。添加(元素);
}
对象[]数组错误代码;
arrayOfAllCodes=setOfallCodes.toArray();
对于(对象i:arrayOfAllCodes){
myFinalList.clear();
int实际值=(整数)i;
for(整型元素:myList){
如果(元素==实际值){
添加(元素);
}
}
LayoutFlater vi=(LayoutFlater)getApplicationContext().getSystemService(
上下文。布局(充气机和服务);
视图v=vi.充气(R.布局.按钮\视图,空);
按钮btnTest=(按钮)v.findViewById(R.id.mega_按钮);
视图插入点=findViewById(R.id.conteudo);
((视图组)insertPoint.addView(v);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
System.out.println(“结果:+myFinalList”);
}
});
}
}
}
两个按钮的结果是:
[2,2,2]


怎么了?如何使按钮显示结果?

我将试一试。这不足以解决所有问题:

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

  • 请详细说明“过滤器”的工作原理。您是否期望以下输出

  • 视图1=[1,1,1], 视图2=[2,2,2]

    我做到了

    谢谢你的建议,我不得不在ClickListener中进行一些操作

    我的最终代码:

    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);
                    }
                });
            }
        }
    }
    
    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();
                }       
            });
        }
    }
    
    公共类MainActivity扩展活动{
    private List myList=new ArrayList();
    私有集合setOfAallCodes=newHashSet();
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    添加(1);
    添加(1);
    添加(1);
    添加(2);
    添加(2);
    添加(2);
    listItems();
    }
    公共物品清单(){
    for(整型元素:myList){
    集合所有代码。添加(元素);
    }
    对象[]数组错误代码;
    arrayOfAllCodes=setOfallCodes.toArray();
    对于(对象i:arrayOfAllCodes){
    LayoutFlater vi=(LayoutFlater)getApplicationContext().getSystemService(
    上下文。布局(充气机和服务);
    视图v=vi.充气(R.布局.按钮\视图,空);
    按钮btnTest=(按钮)v.findViewById(R.id.mega_按钮);
    视图插入点=findViewById(R.id.conteudo);
    ((视图组)insertPoint.addView(v);
    最终整数=(整数)i;
    setOnClickListener(新的OnClickListener(){
    List myFinalList=new ArrayList();
    @凌驾
    公共void onClick(视图v){
    for(整数:myList){
    如果(atual==整数){
    添加(整数);
    }
    }
    System.out.println(myFinalList);
    myFinalList.clear();
    }       
    });
    }
    }
    

    }

    请删除其他问题以避免重复,好吗?提前谢谢你!这有很多问题,我不知道从哪里开始。。。首先确定:结果是相同的,因为您总是打印相同的结果。。。您希望得到什么结果?是的,这是我想要的输出。