2013-01-22 3 views
1

У меня есть представление в моем приложении, где мне нужно отображать несколько списков вместе друг с другом, каждый из которых содержит данные для другого пользователя. Итак, что я сделал до сих пор, у меня есть 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, поэтому строка имела одинаковую ссылку в памяти. Таким образом, при модификации одного из них, я на самом деле изменял один и тот же экземпляр этого объекта. Черт, не могу поверить, я не видел такой простой вещички. Спасибо вам за помощь.

+0

Опубликовать комментарий вашего класса Adapter_ListView_GridView_Calendar getView(). Вы говорите, что список повторяется, что означает, что адаптер в списке видит где-то одни и те же данные. Вы должны проверить это правильно! – Antrromet

+0

Вы хотите весь класс? – Janpan

+0

Я хочу код getView() Adapter_ListView_GridView_Calendar, если вы можете предоставить? – Antrromet

ответ

1
final View rowView = inflater.inflate(R.layout.list_mobile, parent, false); 
    ListView listView = (ListView) rowView.findViewById(R.id.raw_mylist); 

    listView.setAdapter(adapter); 

      // PARENT 
    mListView.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.v("PARENT", "PARENT TOUCH"); 
      rowView.findViewById(R.id.raw_mylist).getParent() 
        .requestDisallowInterceptTouchEvent(false); 
      return false; 
     } 
    }); 

      //your grid view as child 
    listView.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      Log.v("CHILD", "CHILD TOUCH"); 
      // Disallow the touch request for parent scroll on touch of 
      // child view 
      v.getParent().requestDisallowInterceptTouchEvent(true); 
      return false; 
     } 
    }); 

в способе получения вашего основного адаптера.

+0

У меня нет listviewm в макете xml, я создаю их в коде динамически. Я уже делаю то, что вы предложили выше. – Janpan

+0

, но u did not написал gridview touch в ур методе getview. – kyogs

+0

Я сделал это в основном действии, я отредактирую в главном сообщении, чтобы показать. – Janpan

Смежные вопросы