【问题标题】:How to get animation on listview Item in Adapter class?如何在适配器类中的列表视图项上获取动画?
【发布时间】:2015-01-07 14:56:35
【问题描述】:

我已经成功实现了ListView。我的 ListView 项目中有一个 TextView。所以我会在适配器类中点击文本视图。我也在Adapter 类中正确单击。但我想为我将单击的特定TextView 设置动画,但它没有发生。这是我的代码。 提前致谢。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row = convertView;
        RecordHolder holder = null;
        holder = new RecordHolder();
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(layoutResourceId, parent, false);

            holder.floorNo = (TextView) row.findViewById(R.id.tv_floorno);
            holder.hidedLayout = (LinearLayout) row.findViewById(R.id.hidedLayout);

            row.setTag(holder);
        } else {
            holder = (RecordHolder) row.getTag();
        }

        FloorDetailItem floorDetailItem = data.get(position);
        holder.floorNo.setText("Floor " + floorDetailItem.getFloor());

        holder.floorNo.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        holder.floorNo.startAnimation(leftWrite);
                        handler = new Handler();
                        holder.floorNo.setVisibility(View.GONE);
                        handler.postDelayed(mChangeSplash, 1000);
                    }
                }, 100);
            }
        });
        return row;
    }

    private Runnable mChangeSplash = new Runnable() {
        public void run() {
            if (!isFinishing()) {
                handler.removeCallbacks(this);
                holder.hidedLayout.setVisibility(View.VISIBLE);
            }
        }
    };
     class RecordHolder {
        TextView floorNo;
        LinearLayout hidedLayout;
    }

}

但我进入OnClickListener(),“持有人”错误。错误如下:-“不能引用封闭范围中定义的非最终局部变量持有者” 我不能让它成为最终的。

【问题讨论】:

    标签: java android android-listview adapter


    【解决方案1】:

    最简单的方法是创建一个global 变量,而不是final。它会消除错误。

    因为我不知道你的代码中哪个variable出错了,所以我举个例子:

    在您的类中创建一个普通的私有(或其他)变量,以便所有方法都可以访问它:

    private String globalName;
    

    然后,您可以在 getView 中分配变量:

    globalName = getItem(position).getName();
    

    更新

    使用此链接中提供的答案完成holder:

    adapter holder on listener cannot be final

    【讨论】:

    • 我无法使其成为全球性的,因为在使其成为全球性之后。我将如何获得正确的点击位置??
    • "holder.floorNo."在这一行中,“ holder.floorNo.startAnimation(leftWrite);”
    【解决方案2】:

    习惯使用

    holder.floorNo.startAnimation(leftWrite);<br>
    handler = new Handler();<br>
    holder.floorNo.setVisibility(View.GONE);<br>
    handler.postDelayed(mChangeSplash, 1000);<br>
    

    你可以简单的参考view v,它是onclick的一个参数,和holder.floorNo一样

    这样做

    v.startAnimation(leftWrite);<br>
    handler = new Handler();<br>
    v.setVisibility(View.GONE);<br>
    handler.postDelayed(mChangeSplash, 1000);<br>
    

    Hop 它将消除你的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-17
      • 2013-11-29
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      相关资源
      最近更新 更多