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