2015-11-23 16 views
0

我有兩個Spinners活動A他們持有這些項目:
{"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"}微調控制器setSelection()是如何工作的?

假設在Spinner1中,我選擇值SRV,並在Spinner2中選擇TRN。最後,我將選定的值保存到SQLite中。

在活動B,我想檢索SpinnerA和B.了該項目,並顯示需要注意的是微調A和B具有相同的項目在活動A.紗廠

活動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中的值是正確的,但微調器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 

且Spinner A和B顯示TRN爲好。
但是微調器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); 

     } 

    } 
} 

現在噴絲已經可以顯示插入到第一值。但是如何使微調框顯示Pro-XXX-XXX如果沒有插入值spinner活動A

+0

你可以從數據庫中捕獲值,並構建一個方法來搜索數組的值,獲取數組中的索引,並使用微調方法設置其索引。這可以幫助你:http://stackoverflow.com/questions/2390102/how-to-set-selected-item-of-spinner-by-value-not-by-position – Fustigador

回答

2

爲什麼你會得到不同變量的相同字段?

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 
} 
+0

因爲我需要將這兩個值插入兩行但同一列 – Tony

+0

您必須調用moveToNext()才能獲得下一行。現在你從同一行讀取這些值。 – csenga

+0

我確定錯誤來自這一行。如何調用moveToNext – Tony