Spinner setSelection() 如何工作?
How the Spinner setSelection() works?
我在 Activity 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 中,我 select 值 SRV,而在 Spinner2 中,我 select TRN。最后,我将 selected 值保存到 SQLite 中。
在 Activity B 中,我想取出项目并显示在 SpinnerA 和 B 上。请注意,Spinner A 和 B 与 Activity A 中的 Spinner 具有相同的项目。
ActivityB
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
?
为什么不同的变量得到相同的字段?
项目 11=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;
}
如果 Activity 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
}
我在 Activity 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 中,我 select 值 SRV,而在 Spinner2 中,我 select TRN。最后,我将 selected 值保存到 SQLite 中。
在 Activity B 中,我想取出项目并显示在 SpinnerA 和 B 上。请注意,Spinner A 和 B 与 Activity A 中的 Spinner 具有相同的项目。
ActivityB
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
?
为什么不同的变量得到相同的字段?
项目 11=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;
}
如果 Activity 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
}