[Android界面] 关于获取listview中每一个spinner的值的问题

来源:互联网 发布:php导入excel 编辑:程序博客网 时间:2024/06/01 08:20

最近被一个问题困扰住了,纠结死我了,目前没找到什么好的办法,其实问题很简单:我在界面显示了一个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对象值就好了@Override
        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;      }  }

0 0
原创粉丝点击