Android微调器,更换适配器
好吧,我是Android编程新手,到目前为止,我的经历非常有趣和富有挑战性。但我担心我现在遇到了我自己无法克服的第一个问题 简单地说,我想要做的就是有2个微调器: 1用于国家选择 1用于省/州选择 我想实现的是,当用户选择他/她的国家时,省/州微调器将使用正确的适配器进行更新。目前我只使用2个国家进行测试 当我启动活动时,会出现异常,我的应用程序会崩溃 这是我的代码,任何提示都将不胜感激Android微调器,更换适配器,android,Android,好吧,我是Android编程新手,到目前为止,我的经历非常有趣和富有挑战性。但我担心我现在遇到了我自己无法克服的第一个问题 简单地说,我想要做的就是有2个微调器: 1用于国家选择 1用于省/州选择 我想实现的是,当用户选择他/她的国家时,省/州微调器将使用正确的适配器进行更新。目前我只使用2个国家进行测试 当我启动活动时,会出现异常,我的应用程序会崩溃 这是我的代码,任何提示都将不胜感激 public class ManageAccountActivity extends Activit
public class ManageAccountActivity extends Activity {
final ArrayAdapter<CharSequence> adapterSexe = ArrayAdapter.createFromResource(ManageAccountActivity.this, R.array.sex_array_fr, android.R.layout.simple_spinner_item);
final ArrayAdapter<CharSequence> adapterProvince = ArrayAdapter.createFromResource(ManageAccountActivity.this, R.array.province_array_fr, android.R.layout.simple_spinner_item);
final ArrayAdapter<CharSequence> adapterStates = ArrayAdapter.createFromResource(ManageAccountActivity.this, R.array.state_array_fr, android.R.layout.simple_spinner_item);
final ArrayAdapter<CharSequence> adapterCountry = ArrayAdapter.createFromResource(ManageAccountActivity.this, R.array.country_array_fr, android.R.layout.simple_spinner_item);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.account_management);
Spinner spinSexe = (Spinner) findViewById(R.id.spin_sex);
Spinner spinProvince = (Spinner) findViewById(R.id.spin_province);
Spinner spinCountry = (Spinner) findViewById(R.id.spin_country);
adapterSexe.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapterProvince.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapterStates.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapterCountry.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinSexe.setAdapter(adapterSexe);
spinProvince.setAdapter(adapterProvince);
spinCountry.setAdapter(adapterCountry);
spinCountry.setOnItemSelectedListener(new CountryOnItemSelectedListener());
}
public class CountryOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
setContentView(R.layout.account_management);
Spinner spinProvince = (Spinner) view.findViewById(R.id.spin_province);
if (parent.getItemAtPosition(pos).toString().equals("Canada")) {
spinProvince.setAdapter(adapterProvince);
} else {
spinProvince.setAdapter(adapterStates);
}
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
}
公共类ManageAccountActivity扩展活动{
最终ArrayAdapter Adapters EXE=ArrayAdapter.createFromResource(ManageAccountActivity.this、R.array.sex\u array\u fr、android.R.layout.simple\u spinner\u项);
最终ArrayAdapter adapterProvince=ArrayAdapter.createFromResource(ManageAccountActivity.this,R.array.province\u array\u fr,android.R.layout.simple\u微调器\u项);
最终ArrayAdapter Adapters states=ArrayAdapter.createFromResource(ManageAccountActivity.this,R.array.state\u array\u fr,android.R.layout.simple\u微调器\u项);
最终ArrayAdapter adapterCountry=ArrayAdapter.createFromResource(ManageAccountActivity.this,R.array.country\u array\u fr,android.R.layout.simple\u spinner\u项);
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.account_management);
微调器spinsex=(微调器)findViewById(R.id.spin\u sex);
微调器微调省=(微调器)findViewById(R.id.spin_省);
微调器微调国家=(微调器)findViewById(R.id.spin\u country);
AdapterExe.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
adapterProvince.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
adapterStates.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
adapterCountry.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
spinsex.setAdapter(adapterSexe);
spinProvince.setAdapter(adapterProvince);
spinCountry.setAdapter(adapterCountry);
spinCountry.setOnItemSelectedListener(新CountryOnItemSelectedListener());
}
公共类CountryOnItemSelectedListener实现OnItemSelectedListener{
已选择公共位置(AdapterView父项、视图、整数位置、长id){
setContentView(R.layout.account_management);
微调器微调器省份=(微调器)视图。findViewById(R.id.spin_省份);
if(parent.getItemAtPosition(pos.toString().equals(“Canada”)){
spinProvince.setAdapter(adapterProvince);
}否则{
设置适配器(适配器状态);
}
}
未选择公共无效(AdapterView父级){
//什么也不做。
}
}
}
这是我收到的日志信息
01-10 20:41:01.024:E/AndroidRuntime(1275):
java.lang.RuntimeException:无法实例化活动
ComponentInfo{gggolf.android.minutegolf/gggolf.android.minutegolf.ManageAccountActivity}:
java.lang.NullPointerException
为什么您有
setContentView(R.layout.account\u management)在您的onItemSelected()
方法中的code>?这应该没有必要
此外,您应该在活动的onCreate()
方法中实例化适配器,并将实际的活动实例作为上下文传递
在选择侦听器中检索微调器对象的代码应该从
Spinner spinProvince = (Spinner) view.findViewById(R.id.spin_province);
进入
在select侦听器中的本地视图对象上调用findViewById()
将返回NULL,因为该视图不包含微调器。为什么要setContentView(R.layout.account\u management)在您的onItemSelected()
方法中的code>?这应该没有必要
此外,您应该在活动的onCreate()
方法中实例化适配器,并将实际的活动实例作为上下文传递
在选择侦听器中检索微调器对象的代码应该从
Spinner spinProvince = (Spinner) view.findViewById(R.id.spin_province);
进入
在select侦听器中的本地视图对象上调用findViewById()
将返回NULL,因为该视图不包含微调器。请尝试让您的活动实现AdapterView.OnItemSelectedListener
本身。请注意,我已经移动了微调器
,删除了一些代码,并将其替换为注释-请确保在必要时包含它
public class ManageAccountActivity extends Activity
implements AdapterView.OnItemSelectedListener {
// Your ArrayAdapters as before
Spinner spinSexe = null;
Spinner spinProvince = null;
Spinner spinCountry = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.account_management);
spinSexe = (Spinner) findViewById(R.id.spin_sex);
spinProvince = (Spinner) findViewById(R.id.spin_province);
spinCountry = (Spinner) findViewById(R.id.spin_country);
// Call setDropDownViewResource on your ArrayAdapters
// Call setAdapter on your Spinners
spinCountry.setOnItemSelectedListener(this);
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (parent.getItemAtPosition(pos).toString().equals("Canada")) {
spinProvince.setAdapter(adapterProvince);
} else {
spinProvince.setAdapter(adapterStates);
}
}
public void onNothingSelected(AdapterView parent) {
}
}
公共类ManageAccountActivity扩展活动
实现AdapterView.OnItemSelectedListener{
//你的阵列和以前一样适应
微调器spinsex=null;
微调器微调器=空;
微调器微调国家=空;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.account_management);
spinSexe=(微调器)findViewById(R.id.spin\u sex);
spinProvince=(微调器)findViewById(R.id.spin_province);
spinCountry=(微调器)findViewById(R.id.spin\u country);
//在阵列适配器上调用setDropDownViewResource
//在微调器上调用setAdapter
spinCountry.setOnItemSelectedListener(此);
}
已选择公共位置(AdapterView父项、视图、整数位置、长id){
if(parent.getItemAtPosition(pos.toString().equals(“Canada”)){
spinProvince.setAdapter(adapterProvince);
}否则{
设置适配器(适配器状态);
}
}
未选择公共无效(AdapterView父级){
}
}
尝试让您的活动执行AdapterView.OnItemSelectedListe
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Spinner spinProvince = (Spinner) findViewById(R.id.spin_province);
if (parent.getItemAtPosition(pos).toString().equals("Canada")) {
spinProvince.setAdapter(adapterProvince);
} else {
spinProvince.setAdapter(adapterStates);
}
}