我有一个列表视图,我在其中动态添加一些事件(假设一些图像)。如果我将多个事件添加到同一行,则根据应创建的布局数量并添加到列表视图的特定行的事件数量。它是如何做到的。我试过这种方式。但是当我向行添加多个事件时,它与其他布局重叠。请帮帮我。
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 :(得分:0)
我真的不明白你在说什么,但是你应该能够在每行中使用LinearLayout
或其他ViewGroup
来添加多个孩子。小心点当您回收行时,您需要在removeAllViews
上调用ViewGroup
,以便获得新的布局以添加子项。