关于循环addView子布局监听的问题

                         今天遇到了一个这样的问题,

          

就是循环添加子view时,要个子view添加监听跳转,但是监听可以,但是怎么获得对应的子view里的数据并传递到另一个activity呢,刚开始想,直接添加监听取出不就行了,关键是,同一个子view初始化了多次,去不到对应的数据啊。

int i2 = 0;

LinearLayout.LayoutParams llp = new LayoutParams(LayoutParams.FILL_PARENT,            LayoutParams.WRAP_CONTENT);

                  View[] childView = new View[list.size()]

                       for ( int i = 0; i < list.size(); i++) {
i2 = i;
childView[i] =  mInflater.inflate(R.layout.detai_message_item, null);

llp.addView(childView[i], llp);

childView[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent  intent = new Intent(Re.this,Activity.class);

//本以为这样就行了,可是匿名内部类监听根本拿不到对应额list,人家说要final类型的i
//intent.putExtra("Re",list.get(i));

想了一下,把上边那句,设了个全局i2改成了这样

intent.putExtra("Re",list.get(i2));

可惜还是不行,i2最终被初始化为最后一个即i2等于了list.size();点击哪一个childView[i]

都只能得到最后一个对象即list。get(list.size()),没达到目的。
startActivity(intent);
}
});

              }


经过小哥我再三思索,灵机一动,妙计涌上心头,用view的setTag方法啊,然后再getTag(),能够得到特定的view呦

于是把代码改成了这样,

 LinearLayout.LayoutParams llp = new LayoutParams(LayoutParams.FILL_PARENT,            LayoutParams.WRAP_CONTENT);

                  View[] childView = new View[list.size()]

                       for ( int i = 0; i < list.size(); i++) {

childView[i] =  mInflater.inflate(R.layout.detai_message_item, null);

childView[i].setTag(i)

llp.addView(childView[i], llp);

childView[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent  intent = new Intent(Re.this,Activity.class);
intent.putExtra("Re",list.get((Integer)v.getTag()));
UtilsLog.i("info", "i2=="+(Integer)v.getTag());
startActivity(intent);
}
});

              }

注意红色部分,通过v.getTag()取出  childView[i]对应的listz中的对象

一运行,果然没问题,哈!哈!哈!

若是帮了兄弟姐妹的大忙,别忘了,小哥啊!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值