android 重写用来显示Listview的BaseAdapter后,通过ImageButton监听实现卡片翻转 ,不成功。。高分悬赏
android重写用来显示Listview的BaseAdapter后,加载自定义的Layout布局,然后通过ImageButton监听实现加载布局后的卡片翻转效果,但是每...
android 重写用来显示Listview的BaseAdapter后,加载自定义的Layout布局,然后通过ImageButton监听实现加载布局后的卡片翻转效果,但是每按一次ImageButton,反而是ListView的下一个Item进行翻转,又或者不转(但是我自己设定一个Toast,看是否按钮被点击,该Toast能够正常显示,且显示点击了哪个item中的ImageButton)。弄了很久都毫无头绪,再次请大神搭救( ⊙ o ⊙ )啊!。因为急用,所以在线等答案。。。
给出一部分代码,监听代码如下:
// 通过上面layout得到的view来获取里面的具体控件
holder.back = (ImageButton) convertView.findViewById(R.id.back);
holder.forward = (ImageButton) convertView.findViewById(R.id.forward);
//按钮事件是如何去知道单击的是ListView的哪一项呢,这时就要为每个Button对象添加一个Tag
holder.back.setTag(position);
holder.forward.setTag(position);
animate(holder.mContainer).setDuration(1000);
holder.back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//applyRotation(0,90,R.id.backLayout);
animate(holder.mContainer).rotationYBy(180);
Toast.makeText(mContext, "单击back"+v.getTag(), Toast.LENGTH_SHORT).show();
}
});
// 为forward添加click监听
holder.forward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//applyRotation(-1,180,R.id.frontLayout);
animate(holder.mContainer).rotationYBy(180);
Toast.makeText(mContext, "单击forward"+v.getTag(), Toast.LENGTH_SHORT).show();
}
});
现在我的position位置已经处理好了,可是下面的ImageButton监听一个旋转动画的类,就出错了。
...public void onClick(View v) {applyRotation(-1,180,R.id.frontLayout,holder.mContainer,holder.frontLayout,holder.backLayout); //通过调用这个方法,把所要翻转的控件ID加载进来,可是每当按按钮的时候,反而是当列表拉下来的时候,显示下一条数据就会进行翻转动作。就是说,我按position1,反而是psition3进行翻转动作。... 展开
给出一部分代码,监听代码如下:
// 通过上面layout得到的view来获取里面的具体控件
holder.back = (ImageButton) convertView.findViewById(R.id.back);
holder.forward = (ImageButton) convertView.findViewById(R.id.forward);
//按钮事件是如何去知道单击的是ListView的哪一项呢,这时就要为每个Button对象添加一个Tag
holder.back.setTag(position);
holder.forward.setTag(position);
animate(holder.mContainer).setDuration(1000);
holder.back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//applyRotation(0,90,R.id.backLayout);
animate(holder.mContainer).rotationYBy(180);
Toast.makeText(mContext, "单击back"+v.getTag(), Toast.LENGTH_SHORT).show();
}
});
// 为forward添加click监听
holder.forward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//applyRotation(-1,180,R.id.frontLayout);
animate(holder.mContainer).rotationYBy(180);
Toast.makeText(mContext, "单击forward"+v.getTag(), Toast.LENGTH_SHORT).show();
}
});
现在我的position位置已经处理好了,可是下面的ImageButton监听一个旋转动画的类,就出错了。
...public void onClick(View v) {applyRotation(-1,180,R.id.frontLayout,holder.mContainer,holder.frontLayout,holder.backLayout); //通过调用这个方法,把所要翻转的控件ID加载进来,可是每当按按钮的时候,反而是当列表拉下来的时候,显示下一条数据就会进行翻转动作。就是说,我按position1,反而是psition3进行翻转动作。... 展开
3个回答
展开全部
很显然,你的getView方法写错了。
setTag的方法需要写在获取holder的区域外面,比如这样:
Holder holder=null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.adapter_group_main,null);
holder = new Holder();
holder.imageView = (ImageViewCustom) convertView.findViewById(R.id.imageView);
holder.iv_point = (ImageView) convertView.findViewById(R.id.iv_point);
holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
holder.tv_type = (TextView) convertView.findViewById(R.id.textView2);
holder.tv_peopleNum=(TextView) convertView.findViewById(R.id.textView3);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.tv_type.setTag(position);
holder.tv_type.setOnClickListener(省略..);
return convertView;
这样在adapter每次调用getView的时候,都会将正确的position值赋值给控件,否则控件中的position值总是第一次创建的时候的position值。要记住,listView中每一个item是会回收重用的,所以有些东西必须每次getView的时候都设置一下才会正确。
看了你追加的问题,我觉得你还是没搞清楚ListView的回收重用机制。
ListView中的每一个item不会在滑出可见区域以后被销毁,而是根据情况重新传给新出现的可见位置,通过getView方法中的convertView这个参数实现传递。同时你给这个item设置的所有listener什么也被重用了。同理,也不能通过资源id在OnClickListener中获取到正确的view 。
展开全部
觉得没必要设置tag,因为点击事件是在每个item的view生成时就添加的,从上面看好像没有问题,请附上getView方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
animate(holder.mContainer).rotationYBy(180);
你toast都是正确的,觉得这有问题.
你toast都是正确的,觉得这有问题.
追问
我知道我错在哪里了。是在BaseAdapter类时,里面的position有问题。我加载内容到listview后,显示的按钮返回的position竟然是没有规律的。就是一共10条数据,不是从0,1,2,3.....
而是错乱的。请问这个问题,是我的BaseAdapter类写错了嘛?
追答
BaseAdapter的代码贴了看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询