我正在尝试在我的代码中扩展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"
/>
最佳答案
最后,有两个原因导致此操作无法正常工作,前面的两个答案是正确的:
public CustomSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
<net.domain.package.CustomSpinner
android:id="@+id/sphofentries"
android:layout_below="@+id/tvhofentries"
android:layout_width="300dip"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
/>