如何在适配器类中的列表视图项上获取动画?
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中的自定义基本适配器列表视图?