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

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

  }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值