今天遇到了一個這樣的問題,
就是循環添加子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中的對象
一運作,果然沒問題,哈!哈!哈!
若是幫了兄弟姐妹的大忙,别忘了,小哥啊!