TextView tvRes;
Button btn;
String fgpa;
int maxGrade[]=new int[] {4,3,3,3,3,3,2,2,2};
double rcvdGrade[]=new double[9];
double[] fres=new double[9];
int ssp1;
double sumRes=0,sumPoints=0;
double fail=0;
Spinner sp1,sp2,sp3,sp4,sp5,sp6,sp7,sp8,sp9;
ArrayAdapter<CharSequence> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp1 = findViewById(R.id.sp1);
sp2 = findViewById(R.id.sp2);
sp3 = findViewById(R.id.sp3);
sp4 = findViewById(R.id.sp4);
sp5 = findViewById(R.id.sp5);
sp6 = findViewById(R.id.sp6);
sp7 = findViewById(R.id.sp7);
sp8 = findViewById(R.id.sp8);
sp9 = findViewById(R.id.sp9);
btn=findViewById(R.id.btn);
tvRes=findViewById(R.id.tvRes);
adapter=ArrayAdapter.createFromResource(this,R.array.grades,android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp1.setAdapter(adapter);
sp2.setAdapter(adapter);
sp3.setAdapter(adapter);
sp4.setAdapter(adapter);
sp5.setAdapter(adapter);
sp6.setAdapter(adapter);
sp7.setAdapter(adapter);
sp8.setAdapter(adapter);
sp9.setAdapter(adapter);
ssp1=sp1.getSelectedItemPosition();
if(ssp1==0){
rcvdGrade[0]=10;
}
if (ssp1=='1'){
rcvdGrade[0]=9;
}
if(ssp1=='2'){
rcvdGrade[0]=8;
}
if(ssp1=='3'){
rcvdGrade[0]=7;
}
if(ssp1=='4'){
rcvdGrade[0]=6;
}
if(ssp1=='5'){
rcvdGrade[0]=5;
}
if(ssp1=='6'){
fail=0;
}
我是编程新手。我试图获得一个Spinner
位置,并使用该值,将为一个变量分配一个值,从该变量我可以计算一个百分比。 但是此代码始终选择第一个条件,并将其值设置为10 。我无法弄清楚这段代码出了什么问题。伙计们,帮帮我。另外,如果您对此代码有任何建议或改进,朋友,请告诉我。预先感谢。
其他:我还尝试直接在getSelectedItemPosition();
语句上使用if
函数,并且还尝试通过比较Spinner
中的文本来获取值。但这给了我相同的结果(总是选择第一个条件)。
答案 0 :(得分:2)
创建活动后,您的代码将立即运行。这意味着一旦制成,它将获得微调器的位置,该位置始终为零。该代码将不会再次运行以给您带来不同的价值。您需要设置一个OnItemSelectedListener
,以便每次更改微调器的位置时该值都会更改。
private AdapterView.OnItemSelectedListener spinnerListener =
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// Called anytime a spinner dropdown item is clicked
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
然后在您的onCreate()
方法中编写以下代码:
sp1.setOnItemSelectedListener(spinnerListener);
这仅适用于sp1,但是如果您使用相同的侦听器设置所有微调器,请知道侦听器中的参数parent
是已更改的微调器。如果您需要知道更改了哪个微调器,请使用setTag()
和getTag()
方法。
在onCreate()
中:
sp1.setTag("sp1");
sp2.setTag("sp2");
// set Listeners, etc
在您的onItemSelected()
if (parent.getTag().equals("sp1")) //It was sp1 that changed
// do stuff
else if (parent.getTag().equals("sp2")) //sp2 changed
// do other stuff
编辑:根据您的要求,以下是上述各项的组合:
// Previous declarations
int ssp1;
double sumRes=0,sumPoints=0;
double fail=0;
Spinner sp1,sp2,sp3,sp4,sp5,sp6,sp7,sp8,sp9;
ArrayAdapter<CharSequence> adapter;
private AdapterView.OnItemSelectedListener spinnerListener =
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
int position = parent.getSelectedItemPosition(); // also equal to the parameter position
if (parent.getTag().equals("sp1")) // sp1 was changed this time
// Change rcvdGrade[0] as you please
else if (parent.getTag().equals("sp2")) // sp2 changed
// Change rcvdGrade[1] as you please
else if (parent.getTag().equals("sp3")) //etc
//etc
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// This is required to make the listener happy, but leave it blank
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp1 = findViewById(R.id.sp1);
sp2 = findViewById(R.id.sp2);
sp3 = findViewById(R.id.sp3);
// others set, adapters set, etc
sp1.setTag("sp1");
sp2.setTag("sp2");
sp3.setTag("sp3");
// etc
sp1.setOnItemSelectedListener(spinnerListener);
sp2.setOnItemSelectedListener(spinnerListener);
sp3.setOnItemSelectedListener(spinnerListener);
// etc
}
我不是在这里编写所有代码,但我希望这可以帮助您更好地理解这一点。如果不是,请查阅OnItemSelectedListener
的教程,因为这是您最好与微调器一起使用的方法。如果确定要使用OnClickListener
,请将其设置为按钮。