【问题标题】:Unable to set spinner position based on values retrieved from database无法根据从数据库中检索到的值设置微调器位置
【发布时间】:2011-11-01 06:17:15
【问题描述】:

我正在开发一个 android 应用程序,其中有 3 个微调器从名为 部门、业务和地址

我有条件地加载它们,即如果是部门 A 加载练习 A,B 并根据练习 A 设置地址。

然后我通过 getSelectedItemPosition() 将这些位置保存在另一个数据库表中。

现在,当我尝试使用 3 个变量 deptpos、practicos 和 addrpos 时。 但是,当我在初始化微调器后使用 setSelection 时,它只显示正确的位置,因为其他部门的其余部分不起作用:(

这是我的代码

//Initializing the shared preferences variable
    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    //Loading the database in writable format
    db=mydbhelper.getWritableDatabase();

    //For Medicines Table
    try{
        //For medicines
        Cursor medspin = db.query("medicines", null,"_id="+prefs.getInt("pos",1),null,null,null,null);
        medspin.moveToFirst();
        //Filling the variables to set selemedspintion
        deptpos=medspin.getInt(medspin.getColumnIndex("provider_department"));
        practipos=medspin.getInt(medspin.getColumnIndex("provider_practice"));
        addrpos=medspin.getInt(medspin.getColumnIndex("provider_address"));
        hsname=medspin.getString(medspin.getColumnIndex("healthsystem"));
        medspin.close();
        Toast td=Toast.makeText(this,"Loaded dept is "+deptpos+"Loaded Provider is "+practipos+"Address is "+addrpos,Toast.LENGTH_LONG);
        td.show();


    }
    catch(Exception e){
        Log.e("Error","Error",e);
    }




    try{

        //Cursor
        Cursor depcur = db.rawQuery("SELECT _id,department,"+prefs.getString("hsname",null)+ " FROM dept_masterdata WHERE "+prefs.getString("hsname",null)+"=1",null);
        depcur.moveToFirst();
        startManagingCursor(depcur);
        String[] from = new String[]{"department"};
        int[] to = new int[] { android.R.id.text1 };
         // Now creating an array adapter and set it to display using my row
        //Adaptor for Department
        SimpleCursorAdapter deptype =new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, depcur, from, to);
        deptype.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        dep.setAdapter(deptype);


    }
    catch(Exception e){
        Log.e("Error","Error",e);
    }
     //Now determine which department is selected
    //Department
    dep.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent,View view,int pos,long id){
            deptid=dep.getSelectedItemId();


            //Setting the practice spinner based on the department selected
            Cursor pracur = db.rawQuery("SELECT _id,practice,dept_link,hs_id FROM practice_masterdata WHERE dept_link="+deptid+" AND hs_id="+(prefs.getInt("hsid",0)),null);
            pracur.moveToFirst();
            startManagingCursor(pracur);
            String[] from1 = new String[]{"practice"};
            int[] to1 = new int[]{android.R.id.text1};
            SimpleCursorAdapter practype =new SimpleCursorAdapter(view.getContext(),android.R.layout.simple_spinner_item, pracur, from1, to1);
            practype.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            pra.setAdapter(practype);
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });
    //Practice
    pra.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent,View view,int pos,long id){

            practid=pra.getSelectedItemId();


            //Setting the address  based on the practice selected
            Cursor addcur =db.rawQuery("SELECT * FROM address_masterdata WHERE practice_link="+practid,null);
            addcur.moveToFirst();
            startManagingCursor(addcur);
            String[] from2 = new String[]{"address"};
            int[] to2   = new int[]{android.R.id.text1};
            SimpleCursorAdapter addtype =new SimpleCursorAdapter(view.getContext(),android.R.layout.simple_spinner_item,addcur, from2, to2);
            addtype.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            add.setAdapter(addtype);
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });
    //Address
    add.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent,View view,int pos,long id){
            addrid=add.getSelectedItemId();


        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });







    //Setting the spinners based on the above variables

    dep.setSelection(deptpos);
    pra.setSelection(practipos);
    add.setSelection(addrpos,false);

}

如果变量加载了正确的值,我举杯确认。他们是,但它根本没有设置它们:(。奇怪的是部门显示正确的设置,而实践和地址都不是全部:(。请指出我哪里出错了

谢谢

【问题讨论】:

    标签: java android sqlite android-layout android-emulator


    【解决方案1】:

    practiceaddress 是否已有值?如果没有,则从 depot 选定的侦听器中加载数据以进行练习和寻址,默认情况下,d 首先作为选定元素。

    depots[] = loadDepots();
    depotsSpinner.setAdapter();
    depotsSpinner.setSelected(0);
    
    practice[] = loadPractice(depots[0]);
    practiceSpinner.setAdapter();
    practiceSpinner.setSelected(0);
    
    address[] = loadAddress(depots[0], practice[0]);
    addressSpinner.setAdapter();
    addressSpinner.setSelected(0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2017-05-26
      • 2014-10-27
      • 2019-07-24
      相关资源
      最近更新 更多