2013-10-15 365 views
1

我正在嘗試完全由java代碼創建一個活動。這裏的目標是創建一個活動,通過以前的活動填補自己。這是一個商店列表活動。 用戶在之前的活動中添加了itens,當他要求顯示完整列表時,將生成上述活動。更改TextView按下按鈕的顏色

這裏的問題是,我想將紅色設置爲帶有itens名稱的textviews的初始顏色,當用戶點擊它時,它們將顏色更改爲綠色。 但是,當我點擊它的應用程序強制關閉與消息indexoutofbounds異常。 有人可以幫助我嗎?

public class Listdinamiccor extends Activity { 


Bundle recebendoparametros; 
int i = 0; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_listdinamiccor); 
    Intent parametro = getIntent(); 
    recebendoparametros = parametro.getExtras(); 
    int j = recebendoparametros.getInt("i"); 


    ScrollView sv = new ScrollView(this); 
    LinearLayout ll = new LinearLayout(this); 

    ll.setOrientation(LinearLayout.VERTICAL); 
    sv.addView(ll); 
    final TextView[] tvarray = new TextView[j]; 
    for (i = 0; i < tvarray.length; i++) { 
     String chave = "chave"+i; 
     final TextView tv = new TextView(this); 
     tvarray[i] = new TextView(this); 
     tvarray[i].setText(""+recebendoparametros.getString(chave)); 
     tvarray[i].setTextColor(Color.RED); 
     tvarray[i].setOnClickListener(new View.OnClickListener() { 
      int click = 0; 
      @Override 
      public void onClick(View v) { 
       /*if (click == 0) { 
        tvarray[i].setTextColor(Color.GREEN); 
       } 
       else { 
        tvarray[i].setTextColor(Color.RED); 
       }*/ 
       AlertDialog.Builder alert = new AlertDialog.Builder(Listdinamiccor.this); 
       alert.setTitle("dinamico"); 
       alert.setMessage("eu sou muito dinamico"); 

      } 
     }); 
     ll.addView(tvarray[i]); 
    } 

    this.setContentView(sv); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.listdinamiccor, menu); 
    return true; 
} 

}

+0

安置自己的logcat消息請。 Indexoutofbounds是用來處理你的數組,而不是用textview。 – prijupaul

回答

0

當你的循環執行完畢,我現在被設置爲tvarray.length - 你的onClick處理程序不「記住」我的價值,它只是做了你告訴它to,這是在tvarray [i]上設置TextColor,我現在已經越界了。

一個解決這個問題的方法是做到這一點你setOnClickListener線以上:

final TextView me = tvarray[i]; 

,然後改變你的onClick方法調用me.setTextColor代替tvarray [I] .setTextColor的。

此外,我不會建議掛在你的循環之外的int我 - 我假設你將成員移動到父類,以便編譯當前的代碼,但一般情況下,你不想使用for for循環之外的循環索引(這個例外就是這樣一個原因)。

0

嘗試鑄造你的視圖V到一個TextView您的onclick監聽器裏,而不是使用實例你創建你的數組是這樣的:

tvarray[i].setOnClickListener(new View.OnClickListener() { 
     int click = 0; 
     @Override 
     public void onClick(View v) { 

      if (click == 0) { 
       ((TextView)v).setTextColor(Color.GREEN); 
      } 
      else { 
       ((TextView)v).setTextColor(Color.RED); 
      } 

      AlertDialog.Builder alert = new AlertDialog.Builder(Listdinamiccor.this); 
      alert.setTitle("dinamico"); 
      alert.setMessage("eu sou muito dinamico"); 

     } 
    }); 
+0

謝謝! 它這樣工作! –

+0

是的:)這就是我通常如何操作動態創建的視圖,點擊可以改變所述視圖的外觀。 –