如何在适配器类中的列表视图项上获取动画?

Posted

技术标签:

【中文标题】如何在适配器类中的列表视图项上获取动画?【英文标题】: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(),“持有人”错误。错误如下:-“不能引用封闭范围中定义的非最终局部变量持有者” 我不能让它成为最终的。

【问题讨论】:

【参考方案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 它将消除你的错误。

【讨论】:

以上是关于如何在适配器类中的列表视图项上获取动画?的主要内容,如果未能解决你的问题,请参考以下文章

NullPointerException 在单独的 Asynctask 类中获取列表视图的适配器

列表视图中的页脚按钮,如何从自定义列表适配器中获取值

如何将最新数据附加到android中的自定义基本适配器列表视图?

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

拖放到列表视图上,如何获取放置的项目位置

如何在刷新表视图之前获取视图模型中的存储库列表?