Text values are changed in customized listview when scroll the listview in android?

前端 未结 2 1245
礼貌的吻别
礼貌的吻别 2020-12-10 23:05

In my application am using customized list-view with text view,edit-text and buttons.When i click the button in \"0\"Th position and am change the text view values in \"0\"T

相关标签:
2条回答
  • 2020-12-10 23:38

    The problem is that you are not using a different view holder for every line, and that when recycling your list item views your holders are shuffled togheter.

    You can see this simply adding a final int position field to your holder, where to store the getView position parameter; debugging, you will see what happen.

    So, you can't use holders to store your quantity values

    Furthermore, you are not using the variable list to store quantity values. This code is working for me:

        public View getView(final int position, View convertView,final ViewGroup parent) {
    
        final ViewHolder holder;
        LayoutInflater inflater = activity.getLayoutInflater();
    
        if (convertView == null) {
    
            convertView = inflater.inflate(R.layout.order_custom, null);
    
            holder = new ViewHolder();
    
            holder.order = (Button) convertView.findViewById(R.id.order);
            holder.item_name = (TextView) convertView.findViewById(R.id.item_name);
            holder.order_qty = (TextView) convertView.findViewById(R.id.order_count);
    
            convertView.setTag(holder);
    
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        try{
            HashMap<String, String> map = list.get(position);
    
            holder.item_name.setText(map.get("name"));
            holder.order_qty.setText(map.get("quantity"));
    
            //Log.v("Available or not", ""+map.get("available"));
    
    
        }catch(Exception e){
            e.printStackTrace();
        }
    
    
        holder.order.setOnClickListener(new View.OnClickListener() {
    
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
    
                //here am click the button to change order count text value
                int qty = Integer.valueOf(list.get(position).get("quantity"));
    
                qty++;
    
                holder.order_qty.setText(""+String.valueOf(qty));
                list.get(position).put("quantity", qty+"");
            }
        });
    
    
        return convertView;
    }
    
    0 讨论(0)
  • 2020-12-10 23:46

    I faced the same issue. The reason of the issue is described in the previous answer, however the suggested code block did not help resolving the problem in my case.

    I added 350 records to my list view and one adapter object has four EditTexts.

    Unexpected behaviors were occurring with TextWatcher listener always.

    I used focus check listener to solve this problem:

    holder.priceView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                    @Override
                    public void onFocusChange(View v, boolean hasFocus) {
                        if (!hasFocus)
                        {
                           // saving data on focus loss.
                           p.setPrice(holder.priceView.getText().toString());
                        }
                    }
                });
    
    // holder is my ViewHolder object , priceView is a editText in holder object, p is a reference of my data model.
    

    This works, but the real time updates can be not as expected - like text watchers.

    And there is the worst case, when firing last action (without focus losing, last edited value is not triggered and updated).

    0 讨论(0)
提交回复
热议问题