2011-04-08 2 views
0

У меня есть список, в котором я добавляю некоторые события (предполагаю некоторое изображение) динамически. Если я добавляю несколько событий в одну и ту же строку, в зависимости от количества событий, которое должно быть создано и добавлено в макете отдельных строк списка. Как это сделать. Я пробовал этот путь. но он перекрывается с другим макетом, когда я добавляю несколько строк в строку. Пожалуйста, помогите мне.макеты в виде списка в 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; 



    } 

ответ

0

Я не очень понимаю, что вы говорите, но вы должны быть в состоянии использовать LinearLayout или другой ViewGroup в каждой строке, которая позволит вам добавить несколько детей. Просто будь осторожен; когда вы перерабатываете строку, вам нужно будет позвонить removeAllViews на ваш ViewGroup, чтобы вы получили свежий макет, чтобы добавить детей.

+0

ya Я удалил представление перед добавлением любого вида. что, если я использую относительный макет вместо линейного макета. – user562237

+0

Это тоже сработает. –

+0

, тогда его не работает. На самом деле моя главная цель - добавить макеты dynamiccaly в строку в виде списка. – user562237

Смежные вопросы