Reputation: 3811
I have a custom class that is used as a View
for each item in a ListView
. When the View
initializes, it starts updating itself every second.
Where can I detect that the view is being removed, and cancel the timer?
Edit: Here's the code for the view.
public class CustomViewCell extends LinearLayout {
private static final String TAG = "CustomViewCell";
private ImageView itemImage;
private TextView itemTitle;
private TextView itemEstimate;
private CustomEvent event;
private Handler mHandler = new Handler();
public CustomViewCell(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
@Override
protected void onFinishInflate() {
Log.v(TAG, "OnFinishInflate");
itemImage = (ImageView) findViewById(R.id.itemImage);
itemTitle = (TextView) findViewById(R.id.itemTitle);
itemEstimate = (TextView) findViewById(R.id.itemEstimate);
super.onFinishInflate();
}
public void renderWithEvent(CustomEvent event){
this.event = event;
String imageURL = event.imageURL();
if (imageURL != null){
Picasso.with(getContext()).load(imageURL).into(itemImage);
}else{
itemImage.setImageResource(android.R.color.transparent);
}
itemTitle.setText(event.title);
mHandler.removeCallbacksAndMessages(null);
updateEstimate();
}
public void updateEstimate(){
itemEstimate.setText(event.getEstimate());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
updateEstimate();
}
}, 1000);
}
}
And here's the code for the ListView Adapter:
private class EventsAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CustomEvent event = (CustomEvent) getItem(position);
Context context = getActivity();
CustomViewCell eventItem;
if (convertView == null){
eventItem = (CustomViewCell) LayoutInflater.from(context).inflate(R.layout.cell_event, parent, false);
}else{
eventItem = (CustomViewCell) convertView;
}
eventItem.renderWithEvent(event);
return eventItem;
}
...
}
Upvotes: 1
Views: 1555
Reputation: 10482
mListView.setRecyclerListener(new AbsListView.RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
}
});
copy from https://stackoverflow.com/a/26529513/596555
Upvotes: 0
Reputation: 19484
I think I understand what you're looking for. Try onDetachedFromWindow().
Upvotes: 1