2014-05-01 9 views
5

snapfish과 같은 Gridview를 만들려면 StickyGridHeaders 라이브러리를 사용합니다. 대신 확인란의 헤더보기 (빨간색 화살표)에 버튼을 터치 할 때 나는 팝업 창을 표시StickyGridHeader의 팝업 창이 잘못 표시됩니다.

enter image description here

: 여기 내에서 예상되는 레이아웃입니다. 문제는 내 팝업 창이 항상 잘못된 위치를 표시한다는 것입니다. 내가 보여 주면

public View getHeaderView(final int position, View convertView, ViewGroup parent) { 
      final HeaderViewHolder viewHolder; 
      if(convertView == null){ 
       convertView = inflater.inflate(R.layout.item_header_gallery, null); 
       viewHolder = new HeaderViewHolder(); 
       viewHolder.tvImagePrice = (TextView) convertView.findViewById(R.id.tvImagePrice); 
       viewHolder.btnTouch = (Button) convertView.findViewById(R.id.btnTouch); 
       convertView.setTag(viewHolder); 
      }else{ 
       viewHolder = (HeaderViewHolder) convertView.getTag();  
      } 

      ImageGroup item = headers.get(position);  
      viewHolder.tvImagePrice.setText(item.getPriceString()); 

      viewHolder.btnTouch.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        int[] location  = new int[2]; 

        viewHolder.btnTouch.getLocationOnScreen(location); 
        // location always is [905,59] for every header item 
        System.out.println("location = " + location[0] + "," + location[1]); 

        // show popup on this location: 
        mPopupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]); 
       } 
      }); 

      return convertView; 
     } 

: 윈도우 디버깅에서, 나는 그것이 끈적 헤더와 같은 위치를 가지고 볼 수 있습니다,하지만 난 여기에 StickyGridHeadersGridView.setAreHeadersSticky(false);

를 사용하여 내 gridview에 대한 끈끈한 헤더를 해제하는 것은 내 어댑터 헤더입니다 헤더 대신 자식보기의 팝업이 나타나면 팝업 창이 올바르게 표시됩니다. 문제가 있습니까?

+0

아직 해결하지 못했다면 클릭 한'View'에서 위치를 얻으십시오 :'viewHolder'의 인스턴스 대신'v.getLocationOnScreen (location);'. – myanimal

+0

시도했지만 여전히 gridview 맨 위에 표시됩니다. 이 라이브러리는 첨부 및 분리보기로 헤더보기를 맨 위에 붙이려고했기 때문에 – R4j

답변

0

봐 실제로 StickyGridHeadersBaseAdapterWrapper

HeaderFillerView v = getHeaderFillerView(adapterPosition.mHeader, convertView, parent); 
View view = mDelegate.getHeaderView(adapterPosition.mHeader, (View)v.getTag(), parent); 
mGridView.detachHeader((View) v.getTag()); 
v.setTag(view); 
mGridView.attachHeader(view); 
convertView = v; 
mLastHeaderViewSeen = v; 
v.forceLayout(); 

에서 헤더보기를 분리, 그것은이라고 반사에 의한 뷰 클래스의 dispatchAttachedToWindowdispatchDetachedFromWindow 그리고 그것은 전체 화면에 잘못된 창을 가져 오는 원인으로 nosacky이 말했습니다.
이제 종료하고 Header 항목과 Gridview 항목과 함께 Listview에 의해이 StickyGridHeaders를 바꿉니다. 이것은 최선의 방법은 아니지만 효과가 있습니다.

1

다른 창 내부의 창 위치가 전체 화면의 위치가 아닌 것처럼 보입니다. 자세한 내용은이 문제를 살펴 보자 : 제대로 헤더 항목의 위치를 ​​얻을 수있는 방법이없는 것처럼 사용이 라이브러리에 연결하기 때문에, getLocationOnScreen() vs getLocationInWindow()

+0

무슨 뜻인지는 알지만 어떻게이 문제를 해결할 수 있습니까? – R4j

관련 문제