简体   繁体   English

Spinner setSelection()如何工作?

[英]How the Spinner setSelection() works?

I have two Spinners in Activity A and they hold these items: 我在活动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"} . {"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"}

Assume that in Spinner1, I select value SRV, and in Spinner2 I select TRN. 假设在Spinner1中,我选择值SRV,在Spinner2中,我选择TRN。 Finally I save the selected value into SQLite. 最后,我将选择的值保存到SQLite中。

In Activity B, I want to retrieve the item out and display on SpinnerA and B. Note that Spinner A and B have the same items as the Spinners in Activity A. 在活动B中,我想检索出该项目并显示在SpinnerA和B上。请注意,Spinner A和B具有与Activity A中的Spinners相同的项目。

Activity B 活动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();
          }
    }
}

The value inserted into SQLite is correct, but the value displayed on Spinner A is incorrect. 插入SQLite的值正确,但微调器A上显示的值不正确。

The Log displays 日志显示

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

and the Spinner A and B display TRN as well. 微调器A和B也显示TRN。
But Spinner A should display SRV instead of TRN. 但是微调框A应该显示SRV而不是TRN。

I know there is a method called setSelection() , but how can it applied to my case? 我知道有一个名为setSelection()的方法,但是如何将其应用于我的情况呢?

Edited 已编辑

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

        }

    }
}

Now the spinner already can display the value inserted to the first. 现在微调器已经可以显示插入第一个值。 But how to make the spinner display Pro-XXX-XXX if no value inserted in the spinner Activity A ? 但是,如果spinner 活动A中未插入任何值,如何使微调器显示Pro-XXX-XXX

Why do you get the same field for different variables? 为什么对于不同的变量会得到相同的字段?

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

For reading two rows in your case instead of the while loop: 为了在您的情况下读取两行而不是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 loop: 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;
    }

If no selection was made in Activity A, then you should insert something that indicating no value selected, for example an empty string(""). 如果在活动A中未选择任何内容,则应插入一些表示未选择任何值的内容,例如空字符串(“”)。 Then, if this can happen with the 3rd spinner, your code can be changed to this: 然后,如果第3个微调器可能发生这种情况,则您的代码可以更改为:

 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;

Also, i've checked your addProjectX methods, i would change them this way: 另外,我已经检查了您的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
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM