Android ContextChanged,generated复选框将添加到ListView中的同一行

Android ContextChanged,generated复选框将添加到ListView中的同一行,android,listview,Android,Listview,因此,如果用户的输入在ListView的EditText中高于6,我想在ListView的同一行中添加一个复选框。但是,它不断将其添加到第一行。我觉得这应该是一些简单的事情,但在搜索其他帖子后我无法理解 另一个问题。从ListView中的每个项获取数据的最佳方法是将其存储在ArrayList中吗?或者在从所有TextView/Spinner/CheckBox获取值方面是否还有其他问题 @Override public View getView(int i, Vie

因此,如果用户的输入在ListView的EditText中高于6,我想在ListView的同一行中添加一个复选框。但是,它不断将其添加到第一行。我觉得这应该是一些简单的事情,但在搜索其他帖子后我无法理解

另一个问题。从ListView中的每个项获取数据的最佳方法是将其存储在ArrayList中吗?或者在从所有TextView/Spinner/CheckBox获取值方面是否还有其他问题

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {

            final ComboView comboView;
            if(view == null){
                comboView = new ComboView();
                LayoutInflater layoutInflater = InputCombos.this.getLayoutInflater();
                view = layoutInflater.inflate(R.layout.input_combos_view, null);
                comboView.combo = (TextView) view.findViewById(R.id.combo);
                comboView.numOrbs = (TextView) view.findViewById(R.id.numOrbs);
                comboView.comboEdit = (EditText) view.findViewById(R.id.comboEdit);
                comboView.comboElement = (Spinner) view.findViewById(R.id.comboElement);

                ArrayAdapter<String> comboElements = new ArrayAdapter<>(InputCombos.this, android.R.layout.simple_spinner_item, elements);
                comboElements.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                comboView.comboElement.setAdapter(comboElements);

                comboView.pos = i;

                comboView.comboEdit.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                    }

                    @Override
                    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                        if(charSequence.length() != 0){
                            int orbCount = Integer.parseInt((charSequence).toString());
                            if(orbCount >= 6){
                                LinearLayout comboViewLayout = (LinearLayout) findViewById(R.id.comboViewLayout);
                                comboView.row = new CheckBox(InputCombos.this);
                                //CheckBox row = new CheckBox(InputCombos.this);
                                comboView.row.setText("Row");
                                comboViewLayout.addView(comboView.row);
                            }
                            comboData.set(comboView.pos,orbCount);
                            System.out.println(comboData);
                        }
                    }

                    @Override
                    public void afterTextChanged(Editable editable) {

                    }
                });

                view.setTag(comboView);
            } else {
                comboView = (ComboView) view.getTag();
            }

            System.out.println(combosNum);
            comboView.combo.setText(combosNum.get(i));

            return view;
        }
@覆盖
公共视图getView(int i、视图视图、视图组视图组){
最终组合视图组合视图;
如果(视图==null){
comboView=新建comboView();
LayoutFlater LayoutFlater=InputCombos.this.GetLayoutFlater();
视图=布局更平坦。充气(R.layout.input\u组合视图,空);
comboView.combo=(TextView)view.findViewById(R.id.combo);
comboView.numOrbs=(TextView)view.findViewById(R.id.numOrbs);
comboView.comboEdit=(EditText)view.findViewById(R.id.comboEdit);
comboView.comboElement=(微调器)view.findViewById(R.id.comboElement);
ArrayAdapter comboElements=新的ArrayAdapter(InputCombos.this,android.R.layout.simple\u微调器\u项,元素);
comboElements.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
comboView.comboElement.setAdapter(comboElements);
comboView.pos=i;
comboView.comboEdit.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
if(charSequence.length()!=0){
int orbCount=Integer.parseInt((charSequence.toString());
如果(或计数>=6){
LinearLayout comboViewLayout=(LinearLayout)findViewById(R.id.comboViewLayout);
comboView.row=新复选框(InputCombos.this);
//复选框行=新复选框(InputCombos.this);
comboView.row.setText(“row”);
comboViewLayout.addView(comboView.row);
}
comboData.set(comboView.pos、orbCount);
System.out.println(组合数据);
}
}
@凌驾
public void PostTextChanged(可编辑){
}
});
view.setTag(comboView);
}否则{
comboView=(comboView)view.getTag();
}
System.out.println(combosNum);
comboView.combo.setText(combosNum.get(i));
返回视图;
}

如果一个布局id被多次找到(就像您有多行具有相同布局的情况一样),Android将返回它能找到的第一个匹配项:行1

LinearLayout comboViewLayout = (LinearLayout) findViewById(R.id.comboViewLayout);
相反,您应该只在当前行中查找它

LinearLayout comboViewLayout = (LinearLayout) view.findViewById(R.id.comboViewLayout);

啊,我确实尝试过,但它说了一些关于将视图设置为最终视图的内容,我不确定这是否是一件好事。我想我应该先试试。。。谢谢。将变量设置为final通常不是个坏主意。在您的情况下,您可能需要引入一个新的final变量,为其指定view的值。在您的情况下,视图本身不能设置为final。