我想要实现单选按钮和的EditText一个ListView的行内。我使用的是ArrayAdapter来填充列表。但问题是,当我选择一个单选按钮,然后向下滚动列表,向上滚动再次被选中该单选框的选中。同样的,在EditText上的内容。文本得到除去当我向上滚动。

有帮助吗?

解决方案

检查您的适配器,你可能不这样做就bindView()的工作权利。你必须对bindView()值重新设置。

我会重新制定了一句,你可能就明白了。 该newView()创建只有5-10次(尽可能多的他们适合在屏幕上),并且它们对其他行再利用。如果你有200行中有一个ListView,其实你只有5-10的看法,你必须确保你更新与bindView()有效改变了看法。你必须存储/保存的更改供以后再使用的对象。

其他提示

在问题是,离开屏幕,所有的观点可能会破坏保存在手机上的内存。如果手机不会与1000个条目做这样的列表将填补你的设备的内存中。

因为这是发生于单选按钮已插入在的EditText的状态变化和文本将被简单地删除,并且如果用户向上滚动的视图将被重新创建的

您需要保存单选按钮,此刻的状态,并在您的适配器编辑文本并重新应用状态,你重新创建您的 getView 方法。

在底座适配器

getView功能。保存的EditText值并显示相同的,如果convertView不为空。

    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_row_person, null);
            holder = new ViewHolder();
            holder.PersonNameView = (TextView) convertView.findViewById(R.id.PersonNameView);
            holder.SpendAmount = (EditText) convertView.findViewById(R.id.SpendAmt);
            holder.SpendAmount.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // TODO Auto-generated method stub
                    int position2 = holder.SpendAmount.getId();
                    EditText Caption = (EditText) holder.SpendAmount;
                    Person per= (Person)holder.SpendAmount.getTag();
                    //SpendAmount is of Double type
                    if(s.toString().length()>0){
                    per.setSpendAmount(Double.parseDouble(s.toString()));
                    per.setFlag(true);}
                    else{
                         Toast.makeText(getApplicationContext(), "Please enter some value", Toast.LENGTH_SHORT).show();
                        }





                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub

                }
            });




            holder.SpendAmount.setTag(listData.get(position));
            convertView.setTag(holder);

        } else {

            ((ViewHolder)convertView.getTag()).SpendAmount.setTag(listData.get(position));
            holder = (ViewHolder) convertView.getTag();

        }


        holder.PersonNameView.setText(listData.get(position).getPersonName());
        holder.SpendAmount.setText(listData.get(position).getSpendAmount().toString());



        return convertView;




    }
     class ViewHolder {
        TextView PersonNameView;
        EditText SpendAmount ;
            }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top