listview乱跳问题-listview乱跳问题:最后状态正确,就是执行动画过程有问题,点击某一个条目中的展开全文按钮,其它的条目也都会走一下动画展开一下,随后又恢复。但最后好、状态都是正确的。

listview乱跳问题:最后状态正确,就是执行动画过程有问题,点击某一个条目中的展开全文按钮,其它的条目也都会走一下动画展开一下,随后又恢复。但最后好、状态都是正确的。

 

@Override
  public View getView(final int position, View convertView, ViewGroup parent) {
   final ViewHolder vh;
   if(convertView==null){
    convertView = View.inflate(mActivity, R.layout.list_item_goddessay, null);
    vh = new ViewHolder(convertView);
    convertView.setTag(vh);
   }else {
    vh = (ViewHolder) convertView.getTag();
   }
   
   final GoddessSayBean bean = (GoddessSayBean) getItem(position);
//   final GoddessSayBean bean = (GoddessSayBean) listView.getItemAtPosition(position);
   
   vh.ivTitle.setImageResource(bean.getImageResId());
   vh.tvTitle.setText(bean.getTitle());
   vh.tvContent.setText(bean.getContent());
   vh.tvComment.setText(bean.getComment());
   vh.tvZan.setText(bean.getZan());
   
   //就是执行动画过程有问题,点击某一个条目中的展开全文按钮,其它的条目也都会走一下动画展开一下,随后又恢复
   vh.ll_expand.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     bean.isExpand =!bean.isExpand;//对当前bean对应的值切换
     //根据是否展开,重置开始结束值
     if(bean.isExpand){
      startValue = get3LinesHeight();
      endValue = getRealHeight(vh);
     }else{
      startValue  = getRealHeight(vh);
      endValue = get3LinesHeight();
     }
     startAniation(vh,position, startValue, endValue);
    }
   });
   return convertView;

/** 执行动画,
  * vh,position当前条目中的
  * **/
 private void startAniation(final ViewHolder vh,  int position,int startValue, int endValue){
  ValueAnimator valueAnimator = ValueAnimator.ofInt(startValue,endValue);
  final LayoutParams params = (LayoutParams) vh.tv_content.getLayoutParams();
  
  final GoddessSayBean bean = lists.get(position);
  valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
   
   @Override
   public void onAnimationUpdate(ValueAnimator value) {
    
    //动态改变高度
    int currentHeight = (Integer) value.getAnimatedValue();
    params.height = currentHeight;
    vh.tv_content.setLayoutParams(params);
   }
  });
  valueAnimator.addListener(new AnimatorListener() {
   @Override
   public void onAnimationStart(Animator arg0) {
   }
   @Override
   public void onAnimationRepeat(Animator arg0) {
   }
   @Override
   public void onAnimationEnd(Animator arg0) {//结束时切换字和箭头
    if(bean.isExpand){
     vh.iv_arrow.setBackgroundResource(R.drawable.arrow_up);
     vh.tv_expand.setText(mActivity.getResources().getString(R.string.text_recovery));
    }else{
     vh.tv_expand.setText(mActivity.getResources().getString(R.string.text_expand));
     vh.iv_arrow.setBackgroundResource(R.drawable.arrow_down);
    }
   }
   @Override
   public void onAnimationCancel(Animator arg0) {
   }
  });
  valueAnimator.setDuration(500);
  valueAnimator.start();
 }

 


  }

 

解决办法:

startAniation(vh,position, startValue, endValue),之前直接写在getView中,现在放在listview条目中某个控件的点击事件中,将对应数据传递过去。

ViewHolder里面存储了与Item布局对应的相关控件了哈~~和传统的ViewHolder模式其实是一样的,所以如果出现复用的问题按照传统方式解决即可。此外该课程中没有涉及到多布局,不过我在github添加了多布局的支持https://github.com/hongyangAndroid/base-adapter-helper ,可以借鉴自行添加。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值