android中列表视图中的布局

时间:2011-04-08 14:42:24

标签: 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;



    }

1 个答案:

答案 0 :(得分:0)

我真的不明白你在说什么,但是你应该能够在每行中使用LinearLayout或其他ViewGroup来添加多个孩子。小心点当您回收行时,您需要在removeAllViews上调用ViewGroup,以便获得新的布局以添加子项。