繁体   English   中英

滚动时的Android ListView微调器

[英]android listview spinner when scroll

我有一个带有Spinner的自定义ListView ,其中填充了ListArray
没有ListView Scroll也可以正常工作

但是,当我向自定义ListView中添加一些项目时,我在Spinner上选择了第一项或第二项,然后向下滚动ListView (直到该行消失),我看到底部的其他Spinner也会被选中(如上部)
我的选择保留了下来,但选择了底部ListView上的另一个Spinner

我的代码是:

   public class SoundListView extends ArrayAdapter<String>{
        List<String> DataList;
        private final Activity context;
        private ViewGroup vg;
        int startTimer, stopTimer,rPosition;
        String fileTagName = "",externalTagFileName = "",tagFileName= "",fileName = "";

        public SoundListView (Activity context, ArrayList arrSubject, ArrayList arrDurationSplit, ArrayList ids,ArrayList arrFileName,ArrayList arrDuration,ArrayList arrIdTag,ArrayList arrTagName,ArrayList arrMainId,ArrayList arrStartTime, ArrayList arrStopTime) {
            super(context, R.layout.activity_list, arrSubject);
            this.context = context;
            this.arrSubject = arrSubject;
            this.arrDurationSplit = arrDurationSplit;
            this.arrIdTag = arrIdTag;
            this.arrDuration = arrDuration;
            this.arrTagName = arrTagName;
            this.arrMainId = arrMainId;
            this.arrStartTime = arrStartTime;
            this.arrStopTime = arrStopTime;
            this.arrFileName = arrFileName;
            this.ids = ids;
        }
        private ArrayList arrSubject = new ArrayList();
        private ArrayList arrDurationSplit = new ArrayList();
        private ArrayList ids = new ArrayList();
        private ArrayList arrIdTag = new ArrayList();
        private ArrayList arrTagName = new ArrayList();
        private ArrayList arrMainId = new ArrayList();
        private ArrayList arrStartTime = new ArrayList();
        private ArrayList arrStopTime = new ArrayList();
        private ArrayList arrDuration = new ArrayList();
        private ArrayList arrFileName = new ArrayList();
        final private ArrayList<String> arrayTasPath = new ArrayList<String>();

        static class ViewHolder {
            ImageView imgPlaySound,imgShareList;
            TextView txtCaption,txtDynamicTimer,txtDurationSplit,txtTotalTimer,txtHiden;
            Spinner spTags;
            SeekBar seekBar1;
            LinearLayout linearSeek;
            int position;
        }

        @Override
        public View getView(final int position,View convertView, final ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            vg = parent;
            final ArrayList arrTagNameTemp = new ArrayList();
            final ArrayList arrStartTimeTemp = new ArrayList();
            final ArrayList arrStopTimeTemp = new ArrayList();

            arrTagNameTemp.add("all");
            final ViewHolder viewHolder;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.listview, null);
                viewHolder = new ViewHolder();
                viewHolder.position = position;
                viewHolder.txtCaption = (TextView) convertView.findViewById(R.id.txtCaption);
                viewHolder.txtDynamicTimer  = (TextView) convertView.findViewById(R.id.txtDynamicTimer);
                viewHolder.txtDurationSplit = (TextView) convertView.findViewById(R.id.txtTotalTimer);
                viewHolder.imgPlaySound = (ImageView) convertView.findViewById(R.id.imgPlaySound);
                viewHolder.imgShareList = (ImageView) convertView.findViewById(R.id.imgShareList);
                viewHolder.linearSeek = (LinearLayout) convertView.findViewById(R.id.linearSeek);
                viewHolder.spTags = (Spinner) convertView.findViewById(R.id.spTags);
                final ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,android.R.layout.simple_spinner_item, arrTagNameTemp);
                viewHolder.spTags.setAdapter(adapter);
                viewHolder.spTags.setSelection(0);
                final int duration = Integer.valueOf(arrDuration.get(position).toString());
                for(int i = 0; i < arrMainId.size(); i++)
                {
                    if (Integer.valueOf(arrMainId.get(i).toString()) == Integer.valueOf(ids.get(position).toString()))
                    {
                        arrTagNameTemp.add(arrTagName.get(i));
                        arrStartTimeTemp.add(arrStartTime.get(i));
                        arrStopTimeTemp.add(arrStopTime.get(i));
                    }
                }
                //////////////////////////////////////////////////////////////////////////////
                convertView.setTag(viewHolder);
            }
            else
            {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.txtCaption.setText(arrSubject.get(position).toString());
            return convertView;
        }


有谁能够帮助我?

首先,请告诉我为什么要使用这么多的数组列表,不能只使用一个具有自定义数据类型的数组列表。 在该单个数组中,所有值将相互关联,并且易于管理。

我可以建议您解决此问题的方法是创建一个具有自定义数据类型的ArrayList,其中包括您上面给出的所有arraylist的所有值。 并且不要在适配器中初始化数组。 在设置适配器(在“活动”中)的地方初始化并添加值。 您必须在主数组中添加一个参数,比如说“ selectedValue”,默认情况下它将是“ all”,但是当用户选择某个值时,您将在该特定位置更新item的值。

然后在您的getView方法中,将检查每个项目的“ selectedValue”值,如果它等于“ all”,则将其设置,否则将为旋转器设置“ selectedValue”的值。 只要记住一件事,就必须在if和else子句中都为每个项目的微调框设置一个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM