Java 微调器项目单击时应用程序崩溃

Java 微调器项目单击时应用程序崩溃,java,android,spinner,Java,Android,Spinner,我的简单微调器有以下代码: private Spinner spnr_gender; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_complete_profile); //GUI spnr_gender = (Spinner)findView

我的简单微调器有以下代码:

 private Spinner spnr_gender;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_complete_profile);

    //GUI
    spnr_gender = (Spinner)findViewById(R.id.spnr_finish_gender);

    ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this, R.array.strs_gender, android.R.layout.simple_spinner_item);
    gender_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnr_gender.setAdapter(gender_adapter);
    spnr_gender.setOnItemClickListener((AdapterView.OnItemClickListener) this);

}


@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    String selectChoice = adapterView.getItemAtPosition(i).toString();
    Toast.makeText(adapterView.getContext(), selectChoice, Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
private Spinner spnr\u性别;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u complete\u profile);
//桂
spnr_性别=(微调器)findViewById(R.id.spnr_finish_性别);
ArrayAdapter gender_adapter=ArrayAdapter.createFromResource(这个,R.array.strs_gender,android.R.layout.simple_微调器_项);
性别\适配器.setDropDownViewResource(android.R.layout.simple \微调器\下拉菜单\项);
spnr_gender.setAdapter(gender_adapter);
spnr_gender.setOnItemClickListener((AdapterView.OnItemClickListener)this);
}
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
String selectChoice=adapterView.getItemAtPosition(i).toString();
Toast.makeText(adapterView.getContext(),selectChoice,Toast.LENGTH\u SHORT.show();
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
我要做的是烤出用户在微调器上选择的东西。strings.xml中的My string数组:

<string-array name="strs_gender">
    <item>Male</item>
    <item>Female</item>
</string-array>

男性
女性
运行应用程序时,它只是崩溃了。
我在logcat上找不到任何东西,但我的嫌疑犯是这一行
spnr\u gender.setonimclickleenner((AdapterView.OnItemClickListener)this)

如何修复此问题?

使用此选项

spnr_gender.setOnItemSelectedListener(this);
 ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this,  android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.strs_gender));
而不是

spnr_gender.setOnItemClickListener((AdapterView.OnItemClickListener) this);

void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener)

在选择此AdapterView中的项目时注册要调用的回调

编辑

用这个

spnr_gender.setOnItemSelectedListener(this);
 ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this,  android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.strs_gender));
ArrayAdapter gender\u adapter=ArrayAdapter.createFromResource(这是android.R.layout.simple\u spinner\u项,getResources().getStringArray(R.array.strs\u gender));
而不是这个

ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this, R.array.strs_gender, android.R.layout.simple_spinner_item);
ArrayAdapter-gender\u-adapter=ArrayAdapter.createFromResource(这个,R.array.strs\u-gender,android.R.layout.simple\u-spinner\u项);

以下是解决方案

私人纺纱厂spnr_性别

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_complete_profile);

    //GUI
    spnr_gender     =   (Spinner) findViewById(R.id.spnr_finish_gender);

    ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this, R.array.strs_gender, android.R.layout.simple_spinner_item);
    gender_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnr_gender.setAdapter(gender_adapter);
    spnr_gender.setOnItemSelectedListener((AdapterView.OnItemSelectedListener) this);

}


@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    String selectChoice = adapterView.getItemAtPosition(i).toString();
    Toast.makeText(adapterView.getContext(), selectChoice, Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u complete\u profile);
//桂
spnr_性别=(微调器)findViewById(R.id.spnr_finish_性别);
ArrayAdapter gender_adapter=ArrayAdapter.createFromResource(这个,R.array.strs_gender,android.R.layout.simple_微调器_项);
性别\适配器.setDropDownViewResource(android.R.layout.simple \微调器\下拉菜单\项);
spnr_gender.setAdapter(gender_adapter);
spnr_gender.setOnItemSelectedListener((AdapterView.OnItemSelectedListener)this);
}
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
String selectChoice=adapterView.getItemAtPosition(i).toString();
Toast.makeText(adapterView.getContext(),selectChoice,Toast.LENGTH\u SHORT.show();
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
声明项单击侦听器时仅使用(此)上下文 不要使用
(AdapterView.OnItemClickListener)
对其进行强制转换

仅使用

spnr_gender.setOnItemSelectedListener(this);

就这样做吧

sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
sp.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
}
@凌驾
未选择公共无效(AdapterView父级){
}
});

您在适配器中传递了错误的参数。参数应该类似于ArrayAdapter.createFromResource(这个,android.R.layout.simple\u微调器\u项,列表);可能重复的