我已成功实施ListView
。我的TextView
项目中有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()
,错误的是“持有人”。错误如下: - “不能引用封闭范围中定义的非最终局部变量持有者”
而且我无法做到最终。
答案 0 :(得分:0)
最简单的方法是创建global
变量,而不是final
。它将摆脱错误。
因为我不知道代码中哪个variable
出错,我会举个例子:
在类中创建一个普通的私有(或其他)变量,因此所有方法都可以访问它:
private String globalName;
然后,您可以在getView中分配变量:
globalName = getItem(position).getName();
<强>更新强>
使用此链接中提供的答案来确定holder
:
答案 1 :(得分:0)
绝对使用
holder.floorNo.startAnimation(leftWrite);<br>
handler = new Handler();<br>
holder.floorNo.setVisibility(View.GONE);<br>
handler.postDelayed(mChangeSplash, 1000);<br>
您可以简单地引用视图v,它是onclick的参数,与holder.floorNo
相同喜欢这个
v.startAnimation(leftWrite);<br>
handler = new Handler();<br>
v.setVisibility(View.GONE);<br>
handler.postDelayed(mChangeSplash, 1000);<br>
跳它会删除你的错误。