button
私は拡張する習慣がありますView
。コンストラクターでは、XML定義で設定されたカスタム属性を保持するようにメンバー変数を設定しています。現在、XMLで定義されているこれらのボタンは5つあり、それぞれにステージを表すために異なるintが付加されています。
<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
あるため、同じオブジェクトを参照しているという私の最初の考えは正しくないはずです。
誰かが何が起こっているのか、そしてその理由を説明してもらえますか?これは私が明らかにする必要のある言語の誤解だと思います。