Reputation: 43
I am having deliver button in every row of listview.when we click on deliver button,background image should be change for that particular row item(image change to deliver done image).Here I am able to change background image by writing code as setBackgroundResource.but the problem is it will effect to the other row items in listview that means when I am scrolling,other button images for their particular row items are also changed.I have tried for this issue from last three days but no use.Please give me suggestion for doing this.
public View getView(final int position, View convertView, ViewGroup parent) {
![enter image description here][1]
final ViewHolder holder;
holder = new ViewHolder();
if (convertView == null) {
LayoutInflater vi = getLayoutInflater();
convertView = vi.inflate(R.layout.ambassdor_orders_list_fields, null);
}
Routes rou=RouteList.get(position);
holder.route = (Button) convertView.findViewById(R.id.deliverBtn);
holder.memberName = (TextView) convertView.findViewById(R.id.memberNameTxt);
holder.amount = (TextView) convertView.findViewById(R.id.amountTxt);
holder.memberName.setText(rou.getMemberName());
holder.amount.setText(rou.getAmount());
holder.route.setTag(position);
holder.memberName.setTag(position);
holder.amount.setTag(position);
convertView.setTag(holder);
holder.route.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
holder.route.setBackgroundResource(R.drawable.done);
}
});
convertView.setTag(R.id.routeButtton, holder.route);
convertView.setTag(R.id.memberNameTxt, holder.memberName);
convertView.setTag(R.id.amountTxt, holder.amount);
return convertView;
}
Upvotes: 2
Views: 901
Reputation: 43
my problem was solved by changing this line
if(rou.isDone()) {
//setBackground
holder.route.setBackgroundResource(R.drawable.deliver_done);
} else {
//revert background
holder.route.setBackgroundResource(R.drawable.deliver_not_done);
}
holder.route.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
rou.setDone(true);
notifyDataSetChanged();
}
});
Upvotes: 0
Reputation: 43
here is my code
if(rou.isDone()) {
//setBackground
holder.route.setBackgroundResource(R.drawable.deliver_done);
} else {
//revert background
holder.route.setBackgroundResource(R.drawable.deliver_not_done);
}
notifyDataSetChanged();
holder.route.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
rou.setDone(true);
}
});
Upvotes: 0
Reputation: 12530
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
holder = new ViewHolder();
if (convertView == null) {
LayoutInflater vi = getLayoutInflater();
convertView = vi.inflate(R.layout.ambassdor_orders_list_fields, null);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Routes rou=RouteList.get(position);
holder.route = (Button) convertView.findViewById(R.id.deliverBtn);
holder.memberName = (TextView) convertView.findViewById(R.id.memberNameTxt);
holder.amount = (TextView) convertView.findViewById(R.id.amountTxt);
holder.memberName.setText(rou.getMemberName());
holder.amount.setText(rou.getAmount());
holder.route.setOnClickListener(new OnClickListener() { public void onClick(View v) {
holder.route.setBackgroundResource(R.drawable.done);
}
});
return convertView;
}
According to your code you should keep a field to denote the status of the route button background in the model data itself (Routes). so that add code to toggle background with this status.
When you click on button just update the status(eg. rou.setDone(true))
in your getView you can add the following code to update this
if(rou.getDone()) {
//setBackground
} else {
//revert background
}
notifyDatasetChanged()
Upvotes: 1