2014-04-02 2 views
0

listitem 버튼에 애니메이션을 표시하고 싶습니다. 애니메이션이 잘 작동합니다. 내가 클릭하지 않은 다른 버튼도 애니메이션을 보여줍니다. 문제는 어댑터에서보기를 재활용하는 것으로 나타났습니다. 어댑터의 getView 방법 내부 : 사람이 .. 여기에 내가이 상황을 처리하는 데 도움이 될 수 있습니다 것은 내가 작성한 코드입니다listview의 어댑터가 작동하지 않습니다.

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

답변

0

당신은 어떻게 든 그렇게보기가 재사용 될 때마다 그것을 재설정, 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); 
} 

물론 애니메이션을 제거하면 (네트워크 실행 후) 위치에서 위치를 제거해야합니다.