У меня есть представление в моем приложении, где мне нужно отображать несколько списков вместе друг с другом, каждый из которых содержит данные для другого пользователя. Итак, что я сделал до сих пор, у меня есть gridview с столбцами, и внутри каждого столбца я заполняю ячейку gridview списком. Это прекрасно работает, однако он отображает один и тот же список дважды, вместо отображения разных списков для каждого столбца. Странно то, что если я заменил вид списка на обычную метку, он отобразит данные от разных пользователей.Gridview с listview внутри android
Основная деятельность, где я установил GridView адаптер:
gridview.setNumColumns(10);
gridview.setHorizontalSpacing(205);
gridview.setStretchMode(0);
gridview.setAdapter(new Adapter_Labels_GridView_Calendar_dayview(mContext, Session_CurrentSession.current_CALENDAR));
Это адаптер для GridView ... просто раздел GetView. (Вы увидите, что там я установить адаптер для ListViews, который отображает тот же ListView, а не различных них)
public View getView(int position,View convertView, ViewGroup parent)
{
ListView list;
if (convertView == null)
{
// if it's not recycled, initialize some attributes
list = new ListView(mContext);
list.setLayoutParams(new GridView.LayoutParams(150, 500));
list.setPadding(2,2,2,2);
}
else
{
list = (ListView) convertView;
}
list.setAdapter(new Adapter_ListView_GridView_Calendar(mContext, dagtyeVanhaarkappers.get(position), gebookdeurUser.get(position), tekening.get(position)));
list.setCacheColorHint(0);
list.setId(position);
list.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
// Disallow the touch request for parent scroll on touch of child view
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
return list;
}
}
Заранее спасибо
EDIT:
Здесь является gridview на событии касания в основном виде деятельности:
gridview.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
if(isDayView && created)
{
int numchilds = gridview.getChildCount();
for(int i = 0; i < numchilds; i++)
{
gridview.getChildAt(i).getParent().requestDisallowInterceptTouchEvent(false);
}
}
return false;
}
});
E DIT: GetView из Adapter_ListView_GridView_Calendar
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.row_bookingslist, parent , false);
ImageView booking_image = (ImageView) rowView.findViewById(R.id.booking_image);
TextView textBookingTime = (TextView) rowView.findViewById(R.id.booking_time);
TextView textBookingUser = (TextView) rowView.findViewById(R.id.booking_byuser);
booking_image.setImageDrawable(drawables.get(position));
textBookingTime.setText(daytimes.get(position));
textBookingUser.setText(bookedbyuser.get(position));
return rowView;
}
ОТВЕТ НАКОНЕЦ:
Я нашел проблему ... Я думал, что проблема была с адаптером из-за моего странного зрения (Listview внутри GridView) .. Тем не менее, я не делал новые экземпляры данных при чтении их в arraylist, используя цикл for, поэтому строка имела одинаковую ссылку в памяти. Таким образом, при модификации одного из них, я на самом деле изменял один и тот же экземпляр этого объекта. Черт, не могу поверить, я не видел такой простой вещички. Спасибо вам за помощь.
Опубликовать комментарий вашего класса Adapter_ListView_GridView_Calendar getView(). Вы говорите, что список повторяется, что означает, что адаптер в списке видит где-то одни и те же данные. Вы должны проверить это правильно! – Antrromet
Вы хотите весь класс? – Janpan
Я хочу код getView() Adapter_ListView_GridView_Calendar, если вы можете предоставить? – Antrromet