2013-03-05 32 views
3

我有一個16(4x4)TextViews的表格。如果其中一個被點擊,我想改變它的顏色,並從布爾數組中標記或取消標記。OnClick函數中的Android參數

在我的.XML中,TextViews是這樣的:

<TextView 
    android:id="@+id/bonus0" 
    android:layout_width="0dip" 
    android:layout_height="50dip" 
    android:layout_weight="0.25" 
    android:layout_margin="1dip" 
    android:background="#FFFFFF" 
    android:textIsSelectable="false" 
    android:onClick="ClickTurnColor" 
    android:clickable="true" 
    android:textSize="25sp" 
/> 

所以在TextView點擊應該啓動ClickTurnColor()功能。 在這個函數中,我需要一些來自onCreate()函數的變量。 當我嘗試將它們作爲ClickTurnColor()函數的參數傳遞時,出現錯誤。

任何人都可以幫助我嗎?謝謝!

回答

1

聲明您需要的變量onCreate()以外,將它們初始化爲onCreate(),然後在ClickTurnColor方法中使用它們。你將不得不恢復它的方法定義,因此只有在一個參數(查看)接受:

public void ClickTurnColor (View v) 
{ 
//implementation 
} 

而且,記住,Java的命名約定決定了方法應該以小寫字母開頭。

或乘坐非XML的方法,使內部onCreate()聽者如果你真的必須保持這些局部變量:

button.setOnClickListener (new OnClickListener() { 
    @Override 
    public void onClick (View v) 
    { 
    //use your variables here 
    } 
}); 

但是,現在你將不得不作出這些變量final如果他們不實例變量並且你保持他們的本地onCreate()

此外,由於您確實提到您有網格,因此您可以嘗試使用GridView並使用OnItemClickListener。它仍然帶有我之前提到的警告(要麼使本地變量非本地或聲明它們爲final),但它取決於您的需要,它可能更乾淨。

+0

oooh corse!謝謝你,但是當我有16個TextViews的時候,我怎樣才能爲所有視圖定義一個onclicklistener? – Jokus 2013-03-06 10:06:32

+0

@Jokus如果使用xml onClick屬性,請讓所有文字指向同一個方法。然後在該方法中,將視圖的id與textview標識進行比較。如果您在代碼中正確設置點擊監聽器,則適用理智的邏輯。製作一個偵聽器或讓您的活動實現OnClickListerer。然後將每個textview的偵聽器設置爲您創建的偵聽器。那麼你將不得不根據Id做同樣的檢查。我建議你也環顧一下,這個問題之前已經被問到了。 – 2013-03-06 13:26:55