Java 如何在适配器类中获取listview项上的动画?
我已经成功地实现了Java 如何在适配器类中获取listview项上的动画?,java,android,android-listview,adapter,Java,Android,Android Listview,Adapter,我已经成功地实现了ListView。我的ListView项目中有一个TextView。因此,我将在适配器类中获得textview单击。我在Adapter类中也正确单击了。但是我想为我要单击的特定TextView设置动画,但它没有发生。这是我的代码。 提前谢谢 @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertVie
ListView
。我的ListView
项目中有一个TextView
。因此,我将在适配器类中获得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()
,在“holder”中出现了错误。错误如下:-“无法引用在封闭范围中定义的非最终局部变量保持器”
我不能把它设为final。最简单的方法是创建一个
全局
变量,而不是final
。它将消除错误
由于我不知道代码中的哪个变量
出错,我将举一个例子:
在类内部创建一个普通、私有(或其他)变量,以便所有方法都可以访问它:
private String globalName;
然后,您可以在getView中分配变量:
globalName = getItem(position).getName();
更新
使用此链接中提供的答案结束持有者
:
代替使用
holder.floorNo.startAnimation(leftWrite);<br>
handler = new Handler();<br>
holder.floorNo.setVisibility(View.GONE);<br>
handler.postDelayed(mChangeSplash, 1000);<br>
holder.floorNo.startAnimation(leftWrite)
handler=新的handler()
保持架。地板设置可见性(视图。消失)
handler.postDelayed(mChangeSplash,1000)
您只需参考视图v,它是onclick的一个参数,与holder.floorNo相同
你喜欢这样吗
v.startAnimation(leftWrite);<br>
handler = new Handler();<br>
v.setVisibility(View.GONE);<br>
handler.postDelayed(mChangeSplash, 1000);<br>
v.startAnimation(leftWrite)
handler=新的handler()
v、 设置可见性(View.GONE)
handler.postDelayed(mChangeSplash,1000)
Hop它将删除您的错误。我无法使其全局化,因为在使其全局化之后。如何获得正确的点击位置??“holder.floorNo.”在这一行中,“holder.floorNo.startAnimation(leftWrite);”