Я пытаюсь расширить Spinner
класс Android в своем коде для реализации новой функции, но по какой-то причине это не сработало.
Это расширенный класс:
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
объявлено в моеммакет как счетчик.
Но теперь, если я объявляю sphofentries
как CustomSpinner
, я получаю ошибку времени выполнения как раз в тот момент, когда я устанавливаю Layout в Activity:
setContentView(R.layout.settings);
Также я почти уверен, что проблема в том, что мне нужно объявить sphofentries
как CustomSpinner
, потому что если я сделаю это:
CustomSpinner spinner = new CustomSpinner(this);
spinner = (CustomSpinner) findViewById(R.id.sphofentries);
Это проходит без проблем через первую строку, но дает время выполненияошибка во втором, тогда проблема не в создании нового CustomSpinner
, а в установке 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"
/>