开发者

layouts in list view in android

I have a list view in which i am adding some events(assume some image) dynamically. If i add multiple events to the same row, Depending on the number of events that number of layouts should be created and added to the particular row of a list view. How do it do that. I have tried this way. but its overlapping with the other layout when i add multiple events to the row. Please help me out.

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开发者_C百科) 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;



    }


I don't really understand what you're saying, but you should be able to use a LinearLayout or other ViewGroup in each row that will allow you to add multiple children. Just be careful; when you recycle a row you will need to call removeAllViews on your ViewGroup so that you get a fresh layout to add children to.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜