【问题标题】:How the Spinner setSelection() works?Spinner setSelection() 如何工作?
【发布时间】:2015-11-23 17:01:42
【问题描述】:

我在活动 A 中有两个 Spinners,它们持有以下物品:
{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110","PRO-SIE-BIOCON","PRO-BCM-T13/T17"}

假设在 Spinner1 中选择值 SRV,在 Spinner2 中选择 TRN。最后,我将选定的值保存到 SQLite 中。

在活动 B 中,我想检索项目并显示在 SpinnerA 和 B 上。请注意,Spinner A 和 B 与活动 A 中的 Spinner 具有相同的项目。

活动 B

public class B extends Fragment {

    SQLiteDatabase database;
    MyDatabaseHelper dbHelper;
    Cursor c;
    Spinner weather3,status3,project1,project2,project3,project4;
    EditText name3;
    EditText date3;
    String date;
    String ID;
    String Project11;
    String Project22;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.u, container, false);
        dbHelper = new MyDatabaseHelper(getActivity());
        project1 = (Spinner) view.findViewById(R.id.spinner8);
        project2 = (Spinner) view.findViewById(R.id.spinner9);
        name3 = (EditText)view. findViewById(R.id.editText9);
        date3 = (EditText)view. findViewById(R.id.editText12);
        Bundle bundle=this.getArguments();
        if(getArguments()!=null)
        {
            date=bundle.getString("date1");
            ID = bundle.getString("ID");
        }
        Log.e("TAG",date);
        Log.e("TAG",ID);
         RetrievePage(date, ID);
         return view;
    }



    public void addProject1(String l)
    {

        String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110",
                "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET",
                "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"};
        List<String> list = new ArrayList<String>();
        String project11 = l;
        list.add(project11);
        for(String s:arr){
            if(!list.contains(s)){
                list.add(s);
            }
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        project1.setAdapter(adapter);
    }

    public void addProject2(String d)
    {

        String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110",
                "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET",
                "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"};
        List<String> list = new ArrayList<String>();
        String project22 = d;
        list.add(project22);
        for(String s:arr){
            if(!list.contains(s)){
                list.add(s);
            }
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        project2.setAdapter(adapter);
    }

       public void RetrievePage(String date, String id) {
        final String date2=date;
        final String id2 = id;


        database = dbHelper.getWritableDatabase();
        c = database.rawQuery("SELECT i.Weather, i.Status,w.Subcontractors, w.NumberOfPerson, w.NumberOfHours, wd.Project, wd.WorkDescription, wd.Per, wd.TimeIn, wd.TimeOut FROM Information i LEFT JOIN WorkForce w ON w.TInfo_id = i._id LEFT JOIN WorkDetails wd ON wd.Twf_id=w._id WHERE i.Name = ? AND i._id= ? ",
                new String[]{String.valueOf("Lim Chun Yao"),String.valueOf(id2)}, null);
        if (c != null) {
            while (c.moveToNext()) {

                Details WD = new Details();

                 Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                 Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));

                addProject1(Project11);
                addProject2(Project22);
                WD.setProject(Project11);
                WD.setProject(Project22);
            }
            Log.e("TAG1",Project11);
            Log.e("TAG2",Project22);
            c.close();
          }
    }
}

SQLite 中插入的值正确,但 Spinner A 上显示的值不正确。

日志显示

11-23 16:46:29.517  29621-29621/? E/TAG1﹕ TRN-XXX-XXX
11-23 16:46:29.517  29621-29621/? E/TAG2﹕ TRN-XXX-XXX

微调器 A 和 B 也显示 TRN。
但是 Spinner A 应该显示 SRV 而不是 TRN。

我知道有一个方法叫setSelection(),但它如何应用于我的案例?

已编辑

 public void RetrievePage(String date, String id) {
        final String date2 = date;
        final String id2 = id;


        database = dbHelper.getWritableDatabase();
        c = database.rawQuery("SELECT i.Weather, i.Status,w.Subcontractors, w.NumberOfPerson, w.NumberOfHours, wd.Project, wd.WorkDescription, wd.Per, wd.TimeIn, wd.TimeOut FROM Information i LEFT JOIN WorkForce w ON w.TInfo_id = i._id LEFT JOIN WorkDetails wd ON wd.Twf_id=w._id WHERE i.Name = ? AND i._id= ? ",
                new String[]{String.valueOf("Lim Chun Yao"), String.valueOf(id2)}, null);
        int rowNum = 1;
        if (c != null) {
            while (c.moveToNext()) {
                Details WD = new Details();

                switch (rowNum) {
                    case 1:
                        Project11 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject1(Project11);
                        WD.setProject(Project11);
                        break;

                    case 2:
                        Project22 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject2(Project22);
                        WD.setProject(Project22);
                        break;

                    case 3:
                        Project33 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject3(Project33);
                        WD.setProject(Project33);
                        break;

                    case 4:
                        Project44 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                        addProject4(Project44);
                        WD.setProject(Project44);
                        break;


                }
                rowNum += 1;
            }
            c.close();
            Log.e("TAG1", Project11);
            Log.e("TAG2", Project22);

        }

    }
}

现在微调器已经可以显示插入到第一个的值。但是如果spinner Activity A中没有插入值,如何使微调器显示Pro-XXX-XXX

【问题讨论】:

  • 你可以从数据库中获取值,并构建一个方法来搜索你的数组中的值,获取数组中的索引,然后使用 spinner 方法设置他的索引。这可以帮助你:stackoverflow.com/questions/2390102/…

标签: android sqlite android-sqlite spinner android-spinner


【解决方案1】:

为什么不同的变量会得到相同的字段?

Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));

在您的情况下读取两行而不是 while 循环:

Details WD = new Details();

//read the first row
c.moveToNext();
Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
addProject1(Project11);
WD.setProject(Project11); // dont know what does this method do

//read the second row
c.moveToNext();
Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
addProject2(Project22);
WD.setProject(Project22);

c.close();

Log.e("TAG1",Project11);
Log.e("TAG2",Project22);

while 循环:

    int rowNum=1;
    while(c.moveToNext()) {

        switch (rowNum) {
            case 1:
                //handle first row
                Project11 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
                addProject1(Project11);
                WD.setProject(Project11); // dont know what does this method do
                break;

            case 2:
                //handle second row
                Project22 = c.getString.........
                break;
            case 3:
                //handle third
                break;
        //  etc....
        }

        rowNum+=1;
    }

如果在活动 A 中没有进行选择,那么您应该插入一些表示没有选择值的内容,例如空字符串(“”)。然后,如果第三个微调器会发生这种情况,您的代码可以更改为:

 case 3:
                        Project33 = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));
            if(project33.equals("")) // detect if no selection made
            {
                            addProject3("Pro-XXX-XXX"); // set value
                            WD.setProject("Pro-XXX-XXX");
            }
            else
            {
                            addProject3(Project33);
                            WD.setProject(Project33);
            }
                        break;

另外,我检查了您的 addProjectX 方法,我会这样更改它们:

public void addProject1(String l)
{

    String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110",
            "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET",
            "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"};
    List<String> list = new ArrayList<String>();

    list.addAll(Arrays.asList(arr)); // add all of the arr elements to the list

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    project1.setAdapter(adapter);

    project1.setSelection(list.indexOf("l")); // get the index of the l string in the arr, then select that index in the spinner
}

【讨论】:

  • 因为我需要将这两个值插入两行但同一列
  • 您必须调用 moveToNext() 才能获取下一行。现在您从同一行读取这些值。
  • 我确定错误来自这一行。如何调用 moveToNext
  • 而不是while循环:Details WD = new Details(); //读取第一行 c.moveToNext(); Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));添加项目1(项目11); WD.setProject(Project11); // 不知道这个方法做什么 // 读取第二行 c.moveToNext(); Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project));添加项目2(项目22); WD.setProject(Project22); c.close(); Log.e("TAG1",Project11); Log.e("TAG2",Project22);
  • 如果我有4行,我需要为moveNext写4次?
猜你喜欢
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多