Android微调器,更换适配器

Android微调器,更换适配器,android,Android,好吧,我是Android编程新手,到目前为止,我的经历非常有趣和富有挑战性。但我担心我现在遇到了我自己无法克服的第一个问题 简单地说,我想要做的就是有2个微调器: 1用于国家选择 1用于省/州选择 我想实现的是,当用户选择他/她的国家时,省/州微调器将使用正确的适配器进行更新。目前我只使用2个国家进行测试 当我启动活动时,会出现异常,我的应用程序会崩溃 这是我的代码,任何提示都将不胜感激 public class ManageAccountActivity extends Activit

好吧,我是Android编程新手,到目前为止,我的经历非常有趣和富有挑战性。但我担心我现在遇到了我自己无法克服的第一个问题

简单地说,我想要做的就是有2个微调器: 1用于国家选择 1用于省/州选择

我想实现的是,当用户选择他/她的国家时,省/州微调器将使用正确的适配器进行更新。目前我只使用2个国家进行测试

当我启动活动时,会出现异常,我的应用程序会崩溃

这是我的代码,任何提示都将不胜感激

    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);
        }
    }