获取微调器的ListView中的位置并获取其选定的值 [英] Get the position in a ListView of a Spinner and get its selected value
问题描述
我为 ListView
实现了 ArrayAdapter
:
public class CalcAMRListAdapter extends ArrayAdapter<AMRStateListEntry> implements OnItemSelectedListener {
public CalcAMRListAdapter(Context context, List<AMRStateListEntry> entries) {
super(context, R.layout.activity_calc_amr_fragment_row, entries);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
AMRStateListEntry entry = this.getItem(position);
ViewHolder viewHolder = null;
LayoutInflater inflater = null;
if(convertView == null) {
viewHolder = new ViewHolder();
inflater = LayoutInflater.from(this.getContext());
convertView = inflater.inflate(R.layout.activity_calc_amr_fragment_row, parent, false);
viewHolder.spinnerActivity = (Spinner) convertView.findViewById(R.id.calc_amr_row_spinner_activity);
viewHolder.spinnerHours = (Spinner) convertView.findViewById(R.id.calc_amr_row_spinner_hours);
viewHolder.textViewPal = (TextView) convertView.findViewById(R.id.calc_amr_row_textview_pal);
viewHolder.imageButtonDelete = (ImageButton) convertView.findViewById(R.id.calc_amr_row_button_delete);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
String pal = null;
switch (entry.getActivity()) {
case 1: pal = "" + 0.95;
break;
case 2: pal = "" + 1.2;
break;
case 3: pal = "" + 1.5;
break;
case 4: pal = "" + 1.7;
break;
case 5: pal = "" + 1.9;
break;
case 6: pal = "" + 2.4;
break;
default: pal = "";
break;
}
viewHolder.spinnerActivity.setSelection(entry.getActivity());
viewHolder.spinnerActivity.setOnItemSelectedListener(this);
viewHolder.spinnerHours.setSelection(entry.getHour());
viewHolder.spinnerHours.setOnItemSelectedListener(this);
viewHolder.textViewPal.setText(pal);
viewHolder.imageButtonDelete.setImageResource(R.drawable.ic_remove_row);
return convertView;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
private static class ViewHolder {
Spinner spinnerActivity = null;
Spinner spinnerHours = null;
TextView textViewPal = null;
ImageButton imageButtonDelete = null;
}
}
如您所见,我的 ListView
的每个项目都包含两个 Spinner
.在 onItemSelected
方法中,我现在需要获取该行在 ListView
中的位置,其中使用 Spinner
选择一个值,我也在一排中的两个微调器之间需要有所不同.我的数据模型是 AMRStateListEntry
.我需要在 AMRStateListEntry
中设置微调器的选定值.
As you can see each item of my ListView
contains two Spinner
. In the onItemSelected
method i now need to get the position of the row in the ListView
where the Spinner
was used to select a value and i also need to differ between the two spinners in one row. My data model is the AMRStateListEntry
. I need to set the selected values of the spinners inside my AMRStateListEntry
.
我该怎么做?
推荐答案
viewHolder.spinnerHours.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int positionInSpinner, long id) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
改为像这样创建它.然后将 public View getView(最终int位置,View convertView,ViewGroup父级)
的位置设置为 final
.现在,您可以在 onItemSelected
内使用 final int position
.
Create it like this instead. Then you set public View getView(final int position, View convertView, ViewGroup parent)
the position to be final
. Now you can use final int position
inside your onItemSelected
.
并对其他 Spinner
这篇关于获取微调器的ListView中的位置并获取其选定的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!