我正在尝试将微调项等于设置为特定整数。我正在使用 onItemSelected 来尝试完成此操作,但问题是,我需要为选中项目设置的整数使用整数在同一行中的另一个 EditText 乘以。混淆了一点,我尝试多次的行中的所有 EditTexts ,引用到列表然后< strong>迭代以便我可以将它们全部添加起来。如何将每个 EditText 与选定的微调器项目(具有 Int值)到乘以由选择的微调器项目?这就是我到目前为止所拥有的...... 对不起!#/ strong>
int count = 1;
double gradeValue;
List<EditText> allEd = new ArrayList<EditText>();
List<Spinner> allSp = new ArrayList<Spinner>();
@SuppressWarnings("deprecation")
public void onClick(View v) {
TableLayout tableLayout1 = (TableLayout) findViewById(R.id.tableLayout1);
switch(v.getId()){
case R.id.button1:
if(count != 16){
count++;
// Create the row only when the add button is clicked
TableRow tempRow = new TableRow(MainActivity.this);
EditText tempText1 = new EditText(MainActivity.this);
EditText tempText2 = new EditText(MainActivity.this);
TextView tempTextView = new TextView(MainActivity.this);
Spinner spinnerTemp = new Spinner(MainActivity.this);
EditText editText1 = (EditText) findViewById(R.id.editText1);
EditText editText2 = (EditText) findViewById(R.id.editText2);
TextView textView3 = (TextView) findViewById(R.id.textView3);
Spinner s = (Spinner) findViewById(R.id.spinner1);
tempTextView.setText(count + ".");
tempRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tempText1.setLayoutParams(editText1.getLayoutParams());
tempText2.setLayoutParams(editText2.getLayoutParams());
tempTextView.setLayoutParams(textView3.getLayoutParams());
tempText1.setInputType(InputType.TYPE_CLASS_TEXT);
tempText2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
tempText2.setId(count);
spinnerTemp.setLayoutParams(s.getLayoutParams());
spinnerTemp.setId(count);
String options[] = { "A+", "A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "D-", "F" };
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, options);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
spinnerTemp.setAdapter(spinnerArrayAdapter);
allEd.add(tempText2);
allEd.add(editText2);
allSp.add(spinnerTemp);
tempRow.addView(tempTextView);
tempRow.addView(tempText1);
tempRow.addView(tempText2);
tempRow.addView(spinnerTemp);
tableLayout1.addView(tempRow);
}
}
break;
case R.id.button2:
if(count != 1){
count--;
tableLayout1.removeView(tableLayout1.getChildAt(count));
}
break;
case R.id.button3:
int calculation = 0;
double spinnerChoice = 0;
for(int i = 0; i < allEd.size(); i++) {
EditText totalUnits = allEd.get(i);
try {
int units = Integer.parseInt(totalUnits.getText().toString());
calculation += units;
}catch (Exception e) {
//ignore
}
for(int j = 0; j < allSp.size(); j++) {
Spinner gradeTotal = allSp.get(j);
try {
int grades = gradeTotal.getCount();
}catch (Exception e) {
//ignore
}
}
}
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (pos == 0){
//A+
gradeValue = 4.0;
} else if (pos == 1){
//A
gradeValue = 4.0;
} else if (pos == 2){
//A-
gradeValue = 3.7;
} else if (pos == 3){
//B+
gradeValue = 3.3;
} else if (pos == 4){
//B
gradeValue = 3.0;
} else if (pos == 5){
//B-
gradeValue = 2.7;
} else if (pos == 6){
//C+
gradeValue = 2.3;
} else if (pos == 7){
//C
gradeValue = 2.0;
} else if (pos == 8){
//C-
gradeValue = 1.7;
} else if (pos == 9){
//D+
gradeValue = 1.3;
} else if (pos == 10){
//D
gradeValue = 1.0;
} else if (pos == 11){
//D-
gradeValue = 0.7;
} else if (pos == 12){
//F
gradeValue = 0.0;
}
}
}
答案 0 :(得分:2)
循环访问适配器,查找要匹配的值。跟踪循环的索引。找到匹配项后,将微调器的selectedItem设置为该索引。
答案 1 :(得分:0)
这看起来比应该使用表布局更难。如果您的所有行都相似并且对您的设计没有任何不利影响,那么您可能会考虑使用listview。那么你可以简单地通过它们的位置引用同一行上的东西 - 方便地作为参数提供。
但是既然你有这样的话,你可以在arraylist中获得所选微调器项的索引。然后你可以参考EditText arraylist。在我的头脑中,我想你对选定的微调器项目setTag()
作为标签。然后你循环查找标签并做一些事情,如果它存在。这就是我想出的。请注意,我将onitemselected方法更改为返回double的方法,因为我发现这对于此类任务更有用:
private double calcGradeValue (int pos) {
if (pos == 0){
//A+
gradeValue = 4.0;
} else if (pos == 1){
//A
gradeValue = 4.0;
} else if (pos == 2){
//A-
gradeValue = 3.7;
} else if (pos == 3){
//B+
gradeValue = 3.3;
} else if (pos == 4){
//B
gradeValue = 3.0;
} else if (pos == 5){
//B-
gradeValue = 2.7;
} else if (pos == 6){
//C+
gradeValue = 2.3;
} else if (pos == 7){
//C
gradeValue = 2.0;
} else if (pos == 8){
//C-
gradeValue = 1.7;
} else if (pos == 9){
//D+
gradeValue = 1.3;
} else if (pos == 10){
//D
gradeValue = 1.0;
} else if (pos == 11){
//D-
gradeValue = 0.7;
} else if (pos == 12){
//F
gradeValue = 0.0;
}
return gradeValue;
}
public void spinnerLoop() {
for(int i = 0; i < allSp.size(); i++) {
if (allSp.get(i).getTag().toString() == "TAGGED!") {
double gradeValue = calcGradeValue(allSp.get(i).getSelectedItemPosition());
double calculation = (gradeValue) * (Integer.parseInt(allEd.get(i).getText().toString()));
// do something with your calculation double
}
}
}