1

アプリにビューがあり、それぞれに異なるユーザーのデータを含む複数のリストビューを並べて表示する必要があります。これまでに行ったことは、列のあるグリッドビューがあり、各列内にグリッドビューセルにリストビューを入力することです。これは正常に機能しますが、列ごとに異なるリストビューを表示する代わりに、同じリストビューを2回表示します。奇妙なことに、リストビューを通常のラベルに置き換えると、さまざまなユーザーのデータが表示されます。

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セクションだけです。(ここで、同じリストビューを表示し、異なるリストビューを表示しないリストビューのアダプターを設定したことがわかります)

 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;
 }  

}

前もって感謝します

編集:

主なアクティビティのタッチイベントのグリッドビューは次のとおりです。

  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;
            }
        });

編集:Adapter_ListView_GridView_Calendarのgetview

        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;
}

最後に答える:

問題を見つけました...奇妙なビュー(グリッドビュー内のリストビュー)が原因でアダプターに問題があると思いました...しかし、forを使用して配列リストにデータを読み込むときにデータの新しいインスタンスを作成していませんでしたループするので、文字列はメモリ内で同じ参照を持っていました。したがって、どちらかを変更するとき、私は実際にはそのオブジェクトの同じインスタンスを変更していました。くそー、信じられない私はそのような単純な小さなものを見ていませんでした。すべての助けをありがとう。

4

1 に答える 1

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;
        }
    });

メインアダプターの getview メソッドで。

于 2013-01-22T07:16:38.893 に答える