Адаптер listview не работает, perefct
Я хочу показать анимацию на кнопке списка элементов. Анимация работает отлично. некоторые другие кнопки, на которые я не нажимал, также показывают анимацию. Я обнаружил, что проблема будет заключаться в переработке представлений в адаптерах. Может кто-нибудь помочь мне справиться с этой ситуацией.. Вот код, который я написал: внутри getview метод адаптера:
viewHolder.getrate.setOnClickListener(
new CompoundButton.OnClickListener() {
public void onClick(View paramView) {
ListData rateobj = (ListData) viewHolder.getrate.getTag();
paramView.setBackgroundResource(R.drawable.spin_animation);
// Get the background, which has been compiled to an AnimationDrawable object.
frameAnimation = (AnimationDrawable) paramView.getBackground();
// Start the animation (looped playback by default).
frameAnimation.start();
NetworkRun nt = new NetworkRun(rateobj);
String number=rateobj.getDescription();
String num=number.replaceAll("\\s+","");
nt.execute(num);
viewHolder.load.setEnabled(true);
viewHolder.load.setVisibility(View.VISIBLE);
}
});
1 ответ
Вы должны как-то удалить анимацию в getView(...)
, так что каждый раз, когда представление используется повторно, анимация сбрасывается. Я предлагаю следующую идею:
public View getView(int position, View convertView, ViewGroup parent) {
// ... inflate convertView, create viewHolder, etc.
convertView.setBackgroundResource(0); // <-- this will remove animation
viewHolder.getrate.setOnClickListener(/* your code here */);
}
Единственная проблема заключается в том, что анимация исчезнет даже для элементов, где она должна существовать. В этом случае вы можете изменить решение, сохранив набор позиций анимированных элементов.
Set<Integer> animatedPositions = new HashSet<Integer>();
public View getView(final int position, View convertView, ViewGroup parent) {
// ... inflate convertView, create viewHolder, etc.
if(animatedPositions.contains(position)) {
showAnimation(convertView);
} else {
hideAnimation(convertView);
}
viewHolder.getrate.setOnClickListener(
new OnClickListener() {
public void onClick(View paramView) {
animatedPositions.add(position);
showAnimation(paramView);
// your code
}
}
);
}
private void showAnimation(View view) {
view.setBackgroundResource(R.drawable.spin_animation);
AnimationDrawable frameAnimation = (AnimationDrawable) paramView.getBackground();
frameAnimation.start();
}
private void hideAnimation(View view) {
convertView.setBackgroundResource(0);
}
Конечно, вы должны удалять позиции из набора при удалении анимации (после выполнения по сети).