コードでAndroidクラスを拡張して新しい関数を実装しようとしてSpinner
いますが、何らかの理由でこれが機能しませんでした。
これは拡張クラスです:
import android.content.Context;
import android.widget.AdapterView;
import android.widget.Spinner;
public class CustomSpinner extends Spinner {
public CustomSpinner(Context context) {
super(context);
}
public void setSelectionByItemId(AdapterView<?> parent, long id){
for (int i = 0; i < parent.getCount(); i++) {
long itemIdAtPosition = parent.getItemIdAtPosition(i);
if (itemIdAtPosition == id) {
parent.setSelection(i);
break;
}
}
}
}
そして、これは私がこのクラスをインスタンス化する方法です:
CustomSpinner spinner = (CustomSpinner) findViewById(R.id.sphofentries);
これにより、実行時にエラーが発生します。
これはすべてR.id.sphofentries
、私のレイアウトでスピナーとして宣言されている場合です。
しかし今、私がIとして宣言sphofentries
した場合CustomSpinner
、レイアウトをアクティビティに設定した瞬間にランタイムエラーが発生します。
setContentView(R.layout.settings);
また、私がこれを行う場合、問題は、sphofentries
として宣言する必要があることであると確信しています。CustomSpinner
CustomSpinner spinner = new CustomSpinner(this);
spinner = (CustomSpinner) findViewById(R.id.sphofentries);
これは最初の行では問題なく進みますが、2番目の行でランタイムエラーが発生します。問題は、新しいものを作成するのではなく、これにCustomSpinner
設定することです(これはnotのように宣言されます)。sphofentries
CustomSpinner
sphofentries
Spinner
CustomSpinner
たぶん私はレイアウトで何か間違ったことをしている、これは私が次のように宣言しsphofentries
ている方法ですCustomSpinner
:
<CustomSpinner
android:id="@+id/sphofentries"
android:layout_below="@+id/tvhofentries"
android:layout_width="300dip"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
/>