我使用以下代码,我尝试在我的应用中实现微调器:
import java.util.List;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//region UI declaration
Button HelloWorldbtn = (Button) findViewById(R.id.btn1);
Button ClientVersionbtn = (Button) findViewById(R.id.btn2);
Button VerifyUserID = (Button) findViewById(R.id.btn3);
Spinner spn = (Spinner) findViewById(R.id.spinner);
final TextView spnSelection = (TextView) findViewById(R.id.LocationText);
//endregion
//region Spinner creation
List<String> spinnerArray = StartSpinner();
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, spinnerArray);
spn.setAdapter(adapter);
spn.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
Object item = parent.getItemAtPosition(pos);
spnSelection.setText(item.toString());
}
public void onNothingSelected(AdapterView<?> parent){
}
});
//endregion
HelloWorldbtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
onHelloWorld(v);
}
});
ClientVersionbtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
onClientVersion(v);
}
});
VerifyUserID.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
onVerifyUser(v);
}
});
}
}
代码编译并运行。但是,当我从微调器中选择一个项目时,它不会运行onItemSelected
方法。我使用了调试器, logcat 中没有出现错误,也没有抛出任何异常。我尝试过自定义适配器和自定义onItemSelected
侦听器,但我仍然遇到同样的问题。我目前的想法是,这可能是API 23的一个问题,但我还没能确认。
我也对使用微调器的任何替代方法持开放态度,因为它似乎不是维护或实现最简单的小部件。我希望将来能够维护它的人尽可能简单。
提前致谢!
答案 0 :(得分:1)
您没有为适配器设置下拉视图。
您的实施应该是这样的。
List<String> spinnerArray = StartSpinner();
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerArray);
spn.setAdapter(adapter );
spn.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
Object item = parent.getItemAtPosition(pos);
spnSelection.setText(item.toString());
}
public void onNothingSelected(AdapterView<?> parent){
}
});
希望有所帮助:)
答案 1 :(得分:0)
可能是因为你没有将 dropdownView 附加到微调器上。
final ArrayAdapter<String> = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, spinnerArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn.setAdapter(adapter);
尝试上面的代码。
干杯!