2010-10-10 35 views
2

我想將單獨的事件偵聽器添加到動態創建的textview列表中。到目前爲止的代碼是這樣的:在android中爲每個textview分別設置事件偵聽器

while (cur.moveToNext()){ 
    TextView tv = new TextView(this); 
    temp = cur.getString(cur.getColumnIndexOrThrow("_ID")); 
    result = "some text"; 
    tv.setText(result); 
    tv.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent myIntent = new Intent(v.getContext(), newsDetails.class); 
       myIntent.putExtra("id", temp); 
       startActivity(myIntent); 
      } 
     }); 
    lOut.addView(tv); 
} 

但這是行不通的。單獨的文本視圖以列表的形式創建,但單獨的事件監聽器不起作用。

回答

0

問題可能是您的temp變量。我假設它是一個成員變量?當觸發事件時,事件偵聽器中的代碼將使用temp的值,而不是定義onClick()函數時的值。

關於我的頭頂,我能想到的最簡單的解決方案是將temp對象存儲爲TextView的標記,然後在onClick()函數中檢索它。

while (cur.moveToNext()){ 
     TextView tv = new TextView(this); 
     temp = cur.getString(cur.getColumnIndexOrThrow("_ID")); 
     result = "some text"; 
     tv.setText(result); 
     tv.setTag(temp); 
     tv.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        Intent myIntent = new Intent(v.getContext(), newsDetails.class); 
        myIntent.putExtra("id", v.getTag()); 
        startActivity(myIntent); 
       } 
      }); 
     lOut.addView(tv); 
    } 
2

假設這是實際的代碼,而不是僞代碼,然後我跟阿龍同意的事實,使用成員字段的是你的問題的可能來源。然而,我不同意這個解決方案:你不應該使用字段。 (如果你必須給你的字段命名爲「temp」,這是一個非常好的暗示,它應該是一個本地的)。如果你創建了一個「final」局部變量,那麼你知道它不會從你下面改變,並且該固定值將被鎖定到您的匿名子類(即偵聽器)中。

代碼變爲:

while (cur.moveToNext()){ 
    TextView tv = new TextView(this); 
    final String temp = cur.getString(cur.getColumnIndexOrThrow("_ID")); 
    final String result = "some text"; 
    tv.setText(result); 
    tv.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent myIntent = new Intent(v.getContext(), newsDetails.class); 
       myIntent.putExtra("id", temp); 
       startActivity(myIntent); 
      } 
     }); 
    lOut.addView(tv); 
} 

你會的,當然,想擺脫名爲「TEMP」和「結果」的字段,因爲局部變量取代他們的位置。

+0

是的,這種方法肯定更好。這就是我在星期天早上試圖回答技術問題時得到的結果:)我的方法實際上可能和以前一樣存在相同的問題,因爲無論如何你都會存儲一個指向同一個成員變量的指針。 – 2010-10-10 19:49:27

相關問題