今天遇到了一个这样的问题,
就是循环添加子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中的对象一运行,果然没问题,哈!哈!哈!
若是帮了兄弟姐妹的大忙,别忘了,小哥啊!