[英]access to variable within inner class in Android
我正在嘗試從數據庫生成一組帶有數據的按鈕。 但是單擊時,我面臨以下錯誤
變量“ i”是從內部類內部訪問的,需要聲明為final,
由於i的值隨着循環的進行而變化,因此我無法將其設置為final,
footnoteBtns[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
footnote = myDbHelper.getFootnote(chapterNumber, translationList.get(i).get("transNo"));
Popup();
}
});
您可以添加一個最終變量並將其設置為i:
final int j = i;
然后在覆蓋的onClick方法中使用該方法。
之所以必須這樣做,是因為onClick是在另一個時間點而不是直接在for循環->異步中調用的。 因此,您需要確保在隨后調用的方法中應清楚使用哪個值。 這就是變量必須為最終變量的原因。
通常,將setOnClickListener放入循環中的方法很怪異,但是在您的情況下,可以使用以下代碼解決它:
for( int i = 0; i < N; i++) {
final int p = i;
footnoteBtns[p].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
footnote = myDbHelper.getFootnote(chapterNumber, translationList.get(p).get("transNo"));
popup();
}
});
}
試試這個代替當前代碼:
class MyOnClickListener extends View.OnClickListener {
private int myi;
public MyOnClickListener(int i) {
myi = i;
}
@Override
public void onClick(View v) {
footnote = myDbHelper.getFootnote(chapterNumber, translationList.get(myi).get("transNo"));
Popup();
}
};
footnoteBtns[i].setOnClickListener(new MyOnClickListener(i));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.