Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滚动时,列表中项目的ImageView被洗牌_Android_Listview_Android Listview - Fatal编程技术网

Android 滚动时,列表中项目的ImageView被洗牌

Android 滚动时,列表中项目的ImageView被洗牌,android,listview,android-listview,Android,Listview,Android Listview,我有一个列表,当用户单击该列表中的某个项目时,该项目下会显示三个按钮(即Yes、No和Maybe),因此用户可以选择其中任何一个按钮,该响应(1,2,3表示Yes、No、Maybe)将被保存。在适配器的getView中,我们只需检索该响应并在所有列表项目的行上显示imageView 在ArrayAdapter的getView中设置图像 EventUserRelationMO eventUserRelationMO1 =new EventUserRelationMO();

我有一个列表,当用户单击该列表中的某个项目时,该项目下会显示三个按钮(即Yes、No和Maybe),因此用户可以选择其中任何一个按钮,该响应(1,2,3表示Yes、No、Maybe)将被保存。在适配器的getView中,我们只需检索该响应并在所有列表项目的行上显示imageView

在ArrayAdapter的getView中设置图像

EventUserRelationMO eventUserRelationMO1 =new EventUserRelationMO();
                    eventId1 = eventUserRelationMO1.getEventId();
                    if (eventId1 == eventIdPosition) {
                        long eventUserId = eventUserRelationMO1.getEventUserId();

                        int isAttending = eventUserRelationMO1.getIsAttending();
                        if (isAttending == 1) {
                            holder.no.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        } else if (isAttending == 2) {
                            holder.yes.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        } else if (isAttending == 3) {
                            holder.yes.setVisibility(View.GONE);
                            holder.no.setVisibility(View.GONE);
                        } else {
                            holder.yes.setVisibility(View.GONE);
                            holder.no.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        }

                    }
这是完美的工作方式,但当我在列表中有更多的项目时,相应的项目/在滚动时,图像不可见

private class UserOccasions extends ArrayAdapter<EventMO> {
        private ArrayList<EventMO> eventMOs;
        LayoutInflater mInflater;

        UserOccasions(Context context, int textViewResourceId,
                      ArrayList<EventMO> eventMOs) {
            super(context, textViewResourceId, eventMOs);
            this.eventMOs = new ArrayList<EventMO>();
            this.eventMOs.addAll(eventMOs);
            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        public class ViewHolder {
            TextView eventNameTxtV;
            TextView eventPlaceTxtV;
            TextView sendByNameTxtv;
            ImageView yes;
            ImageView no;
            ImageView maybe;

        }

        @Override
        public int getCount() {
            return eventMOs.size();
        }

        /*@Override
        public Object getItem(int position) {
            return position;
        }*/

        @Override
        public long getItemId(int position) {
            return 0;
        }

        // show list values name and mobile number in contact page
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            final EventMO eventMO = eventMOs.get(position);
            if (null == convertView) {
                convertView = mInflater.inflate(R.layout.invitation, null);
                holder = new ViewHolder();
                holder.eventNameTxtV = (TextView) convertView.findViewById(R.id.invitationTitle);
                holder.eventPlaceTxtV = (TextView) convertView.findViewById(R.id.invitationCheckBox);
                holder.sendByNameTxtv = (TextView) convertView.findViewById(R.id.sendByName);
                holder.yes = (ImageView) convertView.findViewById(R.id.yes);
                holder.no = (ImageView) convertView.findViewById(R.id.no);
                holder.maybe = (ImageView) convertView.findViewById(R.id.maybe);

                eventUserRelationMOs = eventMO.getEventUserRelationBOs();
                sendUserMO = eventMO.getUserBO();
                eventIdPosition = eventMO.getEventId();


                for (EventUserRelationMO eventUserRelationMO1 : eventUserRelationMOs) {
                    eventId1 = eventUserRelationMO1.getEventId();
                    if (eventId1 == eventIdPosition) {
                        long eventUserId = eventUserRelationMO1.getEventUserId();

                        int isAttending = eventUserRelationMO1.getIsAttending();
                        if (isAttending == 1) {
                            holder.no.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        } else if (isAttending == 2) {
                            holder.yes.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        } else if (isAttending == 3) {
                            holder.yes.setVisibility(View.GONE);
                            holder.no.setVisibility(View.GONE);
                        } else {
                            holder.yes.setVisibility(View.GONE);
                            holder.no.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        }

                    }
                }
                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.yes.setTag(eventMOs.get(position));
            holder.no.setTag(eventMOs.get(position));
            holder.maybe.setTag(eventMOs.get(position));

                       holder.eventNameTxtV.setText(eventMOs.get(position).getText());
            holder.eventPlaceTxtV.setText(eventMOs.get(position).getPlace());
            holder.sendByNameTxtv.setText(sendUserMO.getUserName());

                       View v = convertView.findViewById(R.id.invitation_single);

            v.getRootView().setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   Intent occasionAct = new Intent(InvitationFragment.this.getActivity(), InvitationActivity.class);
                    occasionAct.putExtra("eventMO", eventMO);
                    occasionAct.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(occasionAct);

                }

            });

            return convertView;

        }
私有类UserAdapter{
私人ArrayList eventMOs;
拉平机;
用户场合(上下文,int textViewResourceId,
ArrayList事件(MOS){
超级(上下文、textViewResourceId、eventMOs);
this.eventMOs=新的ArrayList();
this.eventMOs.addAll(eventMOs);
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
公共类视图持有者{
TextView事件名称txtv;
text查看事件地点txtv;
TextView sendByNameTxtv;
ImageView是;
图像视图编号;
图像视图可能;
}
@凌驾
public int getCount(){
返回eventMOs.size();
}
/*@凌驾
公共对象getItem(int位置){
返回位置;
}*/
@凌驾
公共长getItemId(int位置){
返回0;
}
//在联系人页面中显示列表值姓名和手机号码
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
ViewHolder=null;
final EventMO EventMO=eventMOs.get(位置);
if(null==convertView){
convertView=mInflater.inflate(R.layout.Investment,null);
holder=新的ViewHolder();
holder.eventNameTxtV=(TextView)convertView.findViewById(R.id.invitationTitle);
holder.eventPlaceTxtV=(TextView)convertView.findViewById(R.id.invitationCheckBox);
holder.sendByName txtv=(TextView)convertView.findViewById(R.id.sendByName);
holder.yes=(ImageView)convertView.findViewById(R.id.yes);
holder.no=(ImageView)convertView.findViewById(R.id.no);
holder.maybe=(ImageView)convertView.findViewById(R.id.maybe);
eventUserRelationMOs=eventMO.getEventUserRelationBOs();
sendUserMO=eventMO.getUserBO();
eventIdPosition=eventMO.getEventId();
对于(EventUserRelationMO eventUserRelationMO1:eventUserRelationMOs){
eventId1=eventUserRelationMO1.getEventId();
if(eventId1==eventIdPosition){
long eventUserId=eventUserRelationMO1.getEventUserId();
int isAttending=eventUserRelationMO1.getIsAttending();
如果(isAttending==1){
支架编号setVisibility(视图已消失);
holder.maybe.setVisibility(View.GONE);
}else if(isAttending==2){
holder.yes.setVisibility(视图已消失);
holder.maybe.setVisibility(View.GONE);
}否则如果(isAttending==3){
holder.yes.setVisibility(视图已消失);
支架编号setVisibility(视图已消失);
}否则{
holder.yes.setVisibility(视图已消失);
支架编号setVisibility(视图已消失);
holder.maybe.setVisibility(View.GONE);
}
}
}
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.yes.setTag(eventMOs.get(position));
持有者编号setTag(eventMOs.get(位置));
holder.maybe.setTag(eventMOs.get(position));
holder.eventNameTxtV.setText(eventMOs.get(position.getText());
holder.eventPlaceTxtV.setText(eventMOs.get(position.getPlace());
holder.sendByNameTxtv.setText(sendUserMO.getUserName());
视图v=convertView.findViewById(R.id.u单个);
v、 getRootView().setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
Intent-occasionAct=newintent(InvitationFragment.this.getActivity(),InvitationActivity.class);
occasionAct.putExtra(“eventMO”,eventMO);
occasionAct.addFlags(意图、标志、活动、清除、顶部);
星触觉(occasionAct);
}
});
返回视图;
}

这是我的完整适配器代码。滚动时,任何人都可以帮助我为列表中的每个项目维护相应的imageView。ListView通过循环视图工作。要了解其工作原理,请查看此()

private class UserOccasions extends ArrayAdapter<EventMO> {
        private ArrayList<EventMO> eventMOs;
        LayoutInflater mInflater;

        UserOccasions(Context context, int textViewResourceId,
                      ArrayList<EventMO> eventMOs) {
            super(context, textViewResourceId, eventMOs);
            this.eventMOs = new ArrayList<EventMO>();
            this.eventMOs.addAll(eventMOs);
            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        public class ViewHolder {
            TextView eventNameTxtV;
            TextView eventPlaceTxtV;
            TextView sendByNameTxtv;
            ImageView yes;
            ImageView no;
            ImageView maybe;

        }

        @Override
        public int getCount() {
            return eventMOs.size();
        }

        /*@Override
        public Object getItem(int position) {
            return position;
        }*/

        @Override
        public long getItemId(int position) {
            return 0;
        }

        // show list values name and mobile number in contact page
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            final EventMO eventMO = eventMOs.get(position);
            if (null == convertView) {
                convertView = mInflater.inflate(R.layout.invitation, null);
                holder = new ViewHolder();
                holder.eventNameTxtV = (TextView) convertView.findViewById(R.id.invitationTitle);
                holder.eventPlaceTxtV = (TextView) convertView.findViewById(R.id.invitationCheckBox);
                holder.sendByNameTxtv = (TextView) convertView.findViewById(R.id.sendByName);
                holder.yes = (ImageView) convertView.findViewById(R.id.yes);
                holder.no = (ImageView) convertView.findViewById(R.id.no);
                holder.maybe = (ImageView) convertView.findViewById(R.id.maybe);

                eventUserRelationMOs = eventMO.getEventUserRelationBOs();
                sendUserMO = eventMO.getUserBO();
                eventIdPosition = eventMO.getEventId();


                for (EventUserRelationMO eventUserRelationMO1 : eventUserRelationMOs) {
                    eventId1 = eventUserRelationMO1.getEventId();
                    if (eventId1 == eventIdPosition) {
                        long eventUserId = eventUserRelationMO1.getEventUserId();

                        int isAttending = eventUserRelationMO1.getIsAttending();
                        if (isAttending == 1) {
                            holder.no.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        } else if (isAttending == 2) {
                            holder.yes.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        } else if (isAttending == 3) {
                            holder.yes.setVisibility(View.GONE);
                            holder.no.setVisibility(View.GONE);
                        } else {
                            holder.yes.setVisibility(View.GONE);
                            holder.no.setVisibility(View.GONE);
                            holder.maybe.setVisibility(View.GONE);
                        }

                    }
                }
                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.yes.setTag(eventMOs.get(position));
            holder.no.setTag(eventMOs.get(position));
            holder.maybe.setTag(eventMOs.get(position));

                       holder.eventNameTxtV.setText(eventMOs.get(position).getText());
            holder.eventPlaceTxtV.setText(eventMOs.get(position).getPlace());
            holder.sendByNameTxtv.setText(sendUserMO.getUserName());

                       View v = convertView.findViewById(R.id.invitation_single);

            v.getRootView().setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   Intent occasionAct = new Intent(InvitationFragment.this.getActivity(), InvitationActivity.class);
                    occasionAct.putExtra("eventMO", eventMO);
                    occasionAct.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(occasionAct);

                }

            });

            return convertView;

        }
代码的问题是,当convertView为null时,图像仅被设置一次。当您滚动列表时,列表视图将循环行传递到getView函数(此时convertView将不为null)。在这种情况下,您没有设置ImageView

我已经修改了代码,应该可以了

// show list values name and mobile number in contact page
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        final EventMO eventMO = eventMOs.get(position);
        if (null == convertView) {
            convertView = mInflater.inflate(R.layout.invitation, null);
            holder = new ViewHolder();
            holder.eventNameTxtV = (TextView) convertView.findViewById(R.id.invitationTitle);
            holder.eventPlaceTxtV = (TextView) convertView.findViewById(R.id.invitationCheckBox);
            holder.sendByNameTxtv = (TextView) convertView.findViewById(R.id.sendByName);
            holder.yes = (ImageView) convertView.findViewById(R.id.yes);
            holder.no = (ImageView) convertView.findViewById(R.id.no);
            holder.maybe = (ImageView) convertView.findViewById(R.id.maybe);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }


        eventUserRelationMOs = eventMO.getEventUserRelationBOs();
        sendUserMO = eventMO.getUserBO();
        eventIdPosition = eventMO.getEventId();


         for (EventUserRelationMO eventUserRelationMO1 : eventUserRelationMOs) {
            eventId1 = eventUserRelationMO1.getEventId();
            if (eventId1 == eventIdPosition) {
                long eventUserId = eventUserRelationMO1.getEventUserId();

                int isAttending = eventUserRelationMO1.getIsAttending();
                if (isAttending == 1) {
                    holder.no.setVisibility(View.GONE);
                    holder.maybe.setVisibility(View.GONE);
                } else if (isAttending == 2) {
                    holder.yes.setVisibility(View.GONE);
                    holder.maybe.setVisibility(View.GONE);
                } else if (isAttending == 3) {
                    holder.yes.setVisibility(View.GONE);
                    holder.no.setVisibility(View.GONE);
                } else {
                    holder.yes.setVisibility(View.GONE);
                    holder.no.setVisibility(View.GONE);
                    holder.maybe.setVisibility(View.GONE);
                }

            }
        }

        holder.yes.setTag(eventMOs.get(position));
        holder.no.setTag(eventMOs.get(position));
        holder.maybe.setTag(eventMOs.get(position));

        holder.eventNameTxtV.setText(eventMOs.get(position).getText());
        holder.eventPlaceTxtV.setText(eventMOs.get(position).getPlace());
        holder.sendByNameTxtv.setText(sendUserMO.getUserName());

        View v = convertView.findViewById(R.id.invitation_single);

        v.getRootView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent occasionAct = new Intent(InvitationFragment.this.getActivity(), InvitationActivity.class);
                occasionAct.putExtra("eventMO", eventMO);
                occasionAct.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(occasionAct);

            }

        });

        return convertView;

    }

感谢您的回复我已经尝试了您的代码,但是当我为第一个项目设置图标时,它为两个项目设置了图标-第一个和第七个。在滚动@Anirudh R Kashyap时,图标也会乱序