2011-04-08 3 views
0

J'ai une vue de liste dans laquelle j'ajoute dynamiquement des événements (supposons une image). Si j'ajoute plusieurs événements à la même ligne, Selon le nombre d'événements, le nombre de dispositions doit être créé et ajouté à la ligne particulière d'une vue de liste. Comment fait-il cela? J'ai essayé de cette façon. mais son chevauchement avec l'autre mise en page lorsque j'ajoute plusieurs événements à la ligne. Sil te plait aide moi.dispositions dans la vue de liste dans android

public class EfficientAdapter extends BaseAdapter { 
    public static final int POSITION_TAG_ID = 99; 
    private LayoutInflater mInflater; 

    private List<DTO> calendarList; 
    long time=0; 
    Context context; 


    int i; 
    /** Holds the Date's Day for the current context */ 
    private Date cntxtDate; 
    private OnClickListener eventClickListner = null; 
    private OnClickListener timeSlotClickListner = null; 

    public EfficientAdapter(Date contextDate, int filter, Context context) { 
     this.cntxtDate = contextDate; 
     this.mInflater = LayoutInflater.from(context); 
     this.context = context; 

     this.calendarList = CalendarDAO.getInstance().getRecordsWithinBounds(
       Utilities 
         .convertToString(new Date(contextDate.getYear(), 
           contextDate.getMonth(), contextDate.getDate(), 
           0, 0, 0)), 
       Utilities.convertToString(new Date(contextDate.getYear(), 
         contextDate.getMonth(), contextDate.getDate(), 23, 59, 
         59)), filter, getDBObject(0)); 
    } 

    public List<DTO> getDTos() { 
     return calendarList; 
    } 

    public int getCount() { 
     return 48; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     long differencestart; 
     Date startDate, endDate; 


     Date currViewDate = new Date(cntxtDate.getYear(), cntxtDate.getMonth(), 
       cntxtDate.getDate(), position/2, (position % 2) * 30, 0); 

     convertView = mInflater.inflate(R.layout.listview, null); 
     //layout = layoutInflater.inflate(R.layout.listviewinflate, null); 
     Holder holder = new Holder(); 
     holder = new Holder(); 

     holder.timeSlot = (TextView) convertView 
       .findViewById(R.id.TextViewLeft); 
     //LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     holder.eventColor = (RelativeLayout) convertView.findViewById(R.id.Right);  


     holder.eventTitle = (TextView) convertView 
       .findViewById(R.id.TextViewRight); 
     holder.eventType = (ImageButton) convertView 
       .findViewById(R.id.chooseactivity); 
     holder.eventLayout = (RelativeLayout) convertView 
       .findViewById(R.id.textboxlayout); 
     TextView startTime = (TextView) convertView 
       .findViewById(R.id.calDayViewStartTime); 
     TextView endTime = (TextView) convertView 
       .findViewById(R.id.calDayViewEndTime); 


     convertView.setTag(new Integer(position)); 
     convertView.setOnClickListener(timeSlotClickListner); 

     holder.timeSlot.setText(CalendarEvents.timeFormatter 
       .format(currViewDate)); 
     if (position % 2 == 1) { 
      holder.timeSlot.setTextColor(Color.LTGRAY); 
     } 

     CalendarDTO objCalendarDTO; 
     for (DTO dto : calendarList) { 
      objCalendarDTO = (CalendarDTO) dto; 
      startDate = Utilities.convertToDate(objCalendarDTO.startTime); 
      endDate = Utilities.convertToDate(objCalendarDTO.endTime); 

      differencestart = (startDate.getTime() - currViewDate.getTime()); 
      if ((currViewDate.getTime() >= startDate.getTime() && currViewDate 
        .getTime() < endDate.getTime()) 
        || (differencestart < CalendarEvents.ThirtyMinutesInMiliseconds && differencestart >= 0)) { 
       LinearLayout l = new LinearLayout(context); 
       RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
       params.setMargins(87, 0, 0, 0); 
       if(time == startDate.getTime()) { 

        l.setPadding(90*2, 0, 0, 0);  




       } 
       else { 

        l.setPadding(90, 0, 0, 0); 


       } 
       l.setLayoutParams(params); 
       holder.eventLayout.removeView(l); 
       holder.eventLayout.addView(l); 
       holder.eventLayout.setVisibility(View.VISIBLE); 
       holder.eventLayout.setTag(new Integer(objCalendarDTO.id)); 
       if ((differencestart < CalendarEvents.ThirtyMinutesInMiliseconds && differencestart >= 0)) { 

        holder.eventType.setVisibility(View.VISIBLE); 
        String text = CalendarEvents.timeFormatter.format(Utilities 
          .convertToDate(objCalendarDTO.startTime)); 
        startTime.setText(text); 
        text = CalendarEvents.timeFormatter.format(Utilities 
          .convertToDate(objCalendarDTO.endTime)); 
        endTime.setText(text); 
        holder.eventTitle.setText(objCalendarDTO.description); 
        time = startDate.getTime(); 
       } 
       if (objCalendarDTO.type == 2) { 
        holder.eventColor.setBackgroundColor(0x44801800); 
        holder.eventType 
          .setBackgroundDrawable((Drawable) AspireApplication 
            .getResourcesObject().getDrawable(
              R.drawable.personalactivity)); 
       } else if (objCalendarDTO.type == 0) { 
        holder.eventColor.setBackgroundColor(0x440000FF); 
        holder.eventType 
          .setBackgroundDrawable((Drawable) AspireApplication 
            .getResourcesObject().getDrawable(
              R.drawable.aspireactivity)); 
       } else if (objCalendarDTO.type == 1) { 
        holder.eventColor.setBackgroundColor(0x4400FF00); 
        holder.eventType 
          .setBackgroundDrawable((Drawable) AspireApplication 
            .getResourcesObject().getDrawable(
              R.drawable.schoolactivity)); 
       } 

       /* tell who is going to listen for clicks on the appointments */ 
       holder.eventLayout.setOnClickListener(this.eventClickListner); 

      } 

     } 
     return convertView; 
    } 

    class Holder { 
     public TextView timeSlot; 
     public RelativeLayout eventColor; 
     public TextView eventTitle; 
     public ImageButton eventType; 
     public RelativeLayout eventLayout; 
     public CheckBox checkbox; 
     public RelativeLayout textboxlayout; 



    } 

Répondre

0

Je ne comprends pas vraiment ce que vous dites, mais vous devriez être en mesure d'utiliser un LinearLayout ou autre ViewGroup dans chaque ligne qui vous permettra d'ajouter plusieurs enfants. Fait attention; Lorsque vous recyclez une ligne, vous devez appeler le removeAllViews sur votre ViewGroup afin que vous obteniez une mise en page fraîche pour ajouter des enfants.

+0

J'ai supprimé la vue avant d'ajouter une vue. Et si j'utilise une disposition relative au lieu d'une disposition linéaire? – user562237

+0

Cela fonctionnerait aussi. –

+0

alors ça ne marche pas .. en fait mon objectif principal est d'ajouter des mises en page dynamiques à une rangée de la liste. – user562237

Questions connexes