我有一個自定義button
,它的範圍是View
。在構造函數中,我設置了一個成員變量來保存XML定義中設置的自定義屬性。目前在XML中定義了5個按鈕,每個按鈕都有一個不同的int來表示一個舞臺。具有自定義屬性的Android自定義視圖按鈕引用的是同一對象
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.mycompany.stagedApp"
android:layout_width="match_parent"
android:orientation="horizontal"
style="@style/stepFooter">
<com.mycompany.stagedApp.StepButtonView
android:text="@string/step_one_icon"
style="@style/numberedIcon"
android:id="@+id/step_one_button"
custom:stepNumber="1"
android:background="@drawable/circle" />
<com.mycompany.stagedApp.StepButtonView
android:text="@string/step_two_icon"
style="@style/numberedIcon"
android:id="@+id/step_two_button"
custom:stepNumber="2"
android:background="@drawable/circle" />
<com.mycompany.stagedApp.StepButtonView
android:text="@string/step_three_icon"
style="@style/numberedIcon"
android:id="@+id/step_three_button"
custom:stepNumber="3"
android:background="@drawable/circle" />
<com.mycompany.stagedApp.StepButtonView
android:text="@string/step_four_icon"
style="@style/numberedIcon"
android:id="@+id/step_four_button"
custom:stepNumber="4"
android:background="@drawable/circle" />
<com.mycompany.stagedApp.StepButtonView
android:text="@string/step_five_icon"
style="@style/numberedIcon"
android:id="@+id/step_five_button"
custom:stepNumber="5"
android:background="@drawable/circle" />
</LinearLayout>
在StepButtonView.java
我有:
class StepButtonView extends View {
private static int stepNumber;
public StepButtonView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.custom_values);
stepNumber = ta.getInt(R.styleable.custom_values_stepNumber, 0);
// This log correctly displays the numbers 1 - 5
Log.d("StepFromCustom in constructor", String.format("%d",StepButtonView.stepNumber));
this.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
Log.d("Step", String.format("%d", view.getId()));
// This log only displays the last number 5
Log.d("StepFromCustom", String.format("%d",StepButtonView.stepNumber));
}
});
}
}
當activity
開始並且每個按鈕被構造1-5記錄的數字。然而點擊記錄的數字總是5,最後的stepNumber
。在onClick listener
它列出了一個不同的ID值,但相同stepNumber
所以我最初認爲它指的是同一個對象必須是不正確的。
任何人都可以解釋發生了什麼,以及爲什麼,因爲我認爲這是一種與我明顯需要清理的語言的誤解。
不使用stepNumber作爲靜態成員 –
可能的重複[靜態變量在Java中的使用](http://stackoverflow.com/questions/10689934/usage-of-static-variables-in-java) –