最近被一个问题困扰住了,纠结死我了,目前没找到什么好的办法,其实问题很简单:我在界面显示了一个listview,其中每一个item显示了一个spinner下拉列表和一个EditText文本输入框。通过重写继承的BaseAdapter实现的,可是我想要获取每一个item上面的spinner所选中值,这个该怎样做?关键是BaseAdapter中的getView的position参数会随着屏幕的刷新,自动变换,不是一成不变的,当列表项过多,拉到下面的item后,position就变了,不能获取此时没有显示的首个item的spinner值了,请问该怎么样做啊?我就是想点击button保存时,可以获取所有item的spinner选择值?
1.position的值是不会随着你下拉变化的,第一位的永远是position=0 2.你的getView方法写的就太糙,都没用ViewHolder提高效率,建议好好去看看ListView基础 3.你要的功能很简单,spinner.setTag(object),然后在onItemSelected里,用view.getTag,就取到那个对象了,然后你直接把值设进那个对象 最后你按button的时候,只要取那个list里的obejct对象值就好了 |
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.i("索引值:", String.valueOf(position));
//final PatrolReportBackData patrolReportBackData = patrolReportBackDatas.get(position);
// viewIndex = position;
index = position;
final ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_list_patrol, null);
viewHolder = new ViewHolder();
viewHolder.id = (TextView)convertView.findViewById(R.id.item_patrol_id_textView);
viewHolder.name = (TextView)convertView.findViewById(R.id.item_patrol_name_textView);
viewHolder.spinner = (Spinner)convertView.findViewById(R.id.item_patrol_whetherAnomaly);
viewHolder.relativeLayout = (RelativeLayout)convertView.findViewById(R.id.item_relativeLayout_patrol_description);
viewHolder.disposeDescription = (EditText)convertView.findViewById(R.id.item_patrol_disposeDescription);
viewHolder.addPicture = (TextView)convertView.findViewById(R.id.item_patrol_addPicture);
viewHolder.photograph = (MyGridView)convertView.findViewById(R.id.item_patrol_photograph);
viewHolder.spinner.setTag(position);
viewHolder.disposeDescription.setTag(position);
viewHolder.addPicture.setTag(position);
viewHolder.photograph.setTag(position);
viewHolder.spinner.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
// 在TOUCH的UP事件中,要保存当前的行下标,因为弹出软键盘后,整个画面会被重画
// 在getView方法的最后,要根据index和当前的行下标手动为EditText设置焦点
if(event.getAction() == MotionEvent.ACTION_UP) {
index= Integer.parseInt(view.getTag().toString());
//patrolReportBackData = patrolReportBackDatas.get(index);
}
return false;
}
});
viewHolder.disposeDescription.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
// 在TOUCH的UP事件中,要保存当前的行下标,因为弹出软键盘后,整个画面会被重画
// 在getView方法的最后,要根据index和当前的行下标手动为EditText设置焦点
if(event.getAction() == MotionEvent.ACTION_UP) {
index= Integer.parseInt(view.getTag().toString());
//patrolReportBackData = patrolReportBackDatas.get(index);
}
return false;
}
});
viewHolder.addPicture.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
// 在TOUCH的UP事件中,要保存当前的行下标,因为弹出软键盘后,整个画面会被重画
// 在getView方法的最后,要根据index和当前的行下标手动为EditText设置焦点
if(event.getAction() == MotionEvent.ACTION_UP) {
index= Integer.parseInt(view.getTag().toString());
// patrolReportBackData = patrolReportBackDatas.get(index);
// if(patrolReportBackData.getPhotos() != null)
// bitPhoto = patrolReportBackData.getPhotos();
// else
// bitPhoto = "";
PatrolReportBackData patrolReportBackData = patrolReportBackDatas.get(index);
if(patrolReportBackData.getPhotos() != null)
bitPhoto = patrolReportBackData.getPhotos();
else
bitPhoto = "";
if(holderDatas.get(index).getImageList() != null)
imageItem = holderDatas.get(index).getImageList();
else
imageItem = new ArrayList<HashMap<String,Object>>();
}
return false;
}
});
viewHolder.photograph.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
// 在TOUCH的UP事件中,要保存当前的行下标,因为弹出软键盘后,整个画面会被重画
// 在getView方法的最后,要根据index和当前的行下标手动为EditText设置焦点
if(event.getAction() == MotionEvent.ACTION_UP) {
index= Integer.parseInt(view.getTag().toString());
//patrolReportBackData = patrolReportBackDatas.get(index);
}
return false;
}
});
viewHolder.disposeDescription.clearFocus();
if(index!= -1 && index == position) {
// 如果当前的行下标和点击事件中保存的index一致,手动为EditText设置焦点。
viewHolder.disposeDescription.requestFocus();
}
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
changed = false;
viewHolder.id.setText("");
viewHolder.id.setTag(null);
viewHolder.spinner.setSelection(0);
/**************************************/
// boolean isNewSpinner = false;
// for (ViewHolderData holderData : holderDatas) {
// if(holderData.getPosition() == position)
// {
// viewHolder.spinner.setSelection(holderData.getSpinnerIndex());
// isNewSpinner = true;
// }
// }
//
// if(isNewSpinner)
// viewHolder.spinner.setSelection(0);
/**************************************/
viewHolder.disposeDescription.setText("");
bitPhoto = "";
imageItem = new ArrayList<HashMap<String,Object>>();
ImageAdapter adapter = new ImageAdapter(imageItem,context);
viewHolder.photograph.setAdapter(adapter);
changed = true;
viewHolder.spinner.setTag(position);
viewHolder.disposeDescription.setTag(position);
viewHolder.addPicture.setTag(position);
viewHolder.photograph.setTag(position);
}
再下面点击button,spinner或者别的子控件的时候直接用index就行没看懂加我QQ:125209972
import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Spinner; import android.widget.TextView; public class HasSpinnerListAdapter extends BaseAdapter { private LayoutInflater mInflater; private String[] col; private String[] spinnerItem; //spinner 选项 private int resource; private int[] to; public HasSpinnerListAdapter(Context context, String[] col, String[] spinnerItem, int resource, int[] to) { mInflater = LayoutInflater.from(context); this.col = col; this.spinnerItem = spinnerItem; this.resource = resource; this.to = to; } @Override public int getCount() { // TODO Auto-generated method stub return col.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return col[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub TextView text = null; Spinner spinner = null; if (convertView == null) { convertView = mInflater.inflate(resource, null); } text = (TextView) convertView.findViewById(to[0]); spinner = (Spinner) convertView.findViewById(to[1]); /* * holder = new ViewHolder(); holder.text = (TextView) * convertView.findViewById(to[0]); holder.spinner = (Spinner) * convertView .findViewById(to[1]); convertView.setTag(holder); */ text.setText((CharSequence) col[position]); // 由于每次显示都会调用getView,因此,如果重新设置适配器,会将之前的选择冲掉 if (spinner.getCount() == 0) { ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>( convertView.getContext(), android.R.layout.simple_spinner_item, spinnerItem); spinnerAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(spinnerAdapter); } Log.e("position", String.valueOf(position)); Log.e("spinner", spinner.toString()); return convertView; } }