天天看點

關于循環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中的對象

一運作,果然沒問題,哈!哈!哈!

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