簡體   English   中英

在Android內部類中訪問變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM