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
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;
}
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).