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.
精彩评论