J'ai une vue de liste dans laquelle j'ajoute dynamiquement des événements (supposons une image). Si j'ajoute plusieurs événements à la même ligne, Selon le nombre d'événements, le nombre de dispositions doit être créé et ajouté à la ligne particulière d'une vue de liste. Comment fait-il cela? J'ai essayé de cette façon. mais son chevauchement avec l'autre mise en page lorsque j'ajoute plusieurs événements à la ligne. Sil te plait aide moi.dispositions dans la vue de liste dans 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;
}
J'ai supprimé la vue avant d'ajouter une vue. Et si j'utilise une disposition relative au lieu d'une disposition linéaire? – user562237
Cela fonctionnerait aussi. –
alors ça ne marche pas .. en fait mon objectif principal est d'ajouter des mises en page dynamiques à une rangée de la liste. – user562237