2016-01-13 44 views
0

我有一个列表,当用户点击该列表中的一个项目时,该项目下会显示三个按钮(即是,否和可能),因此用户可以选择任何一个按钮和响应(如1,2,3的是,不,也许)将saved.In适配器的getView只是我们检索响应并显示ImageView的所有列表项的行滚动时列表中某个项目的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; 

     } 

这是我的全部适配器代码的任何一个可以帮助我保持对列表中的每个项目对应的ImageView滚动

回答

0

ListView的工作原理是回收views.To知道更多关于它是如何运作的,你可以当看看这个(http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/)。

代码的问题在于,当convertView为null时,图像仅被设置一次。当你滚动列表时,列表视图将一个循环的行传递给getView函数(这是convertView不会为空的时候)。在这种情况下,您没有设置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; 

    } 
+0

谢谢你的回应,我已经试过你的代码,但是当我的第一个项目设置图标它设置图标2项 - 首先一个和第七one。图标也滚动@滚动@ Anirudh R Kashyap –

相关问题