2013-08-06 2 views
3

나는 CWAC 병합 어댑터에 문제가 있어요 : 내가 연이어 뷰와 어댑터를 추가하고 때 잘 작동하지만 보인다 https://github.com/commonsguy/cwac-merge병합 어댑터 헤더 충돌

그 나는 다른 뒤에 하나를 두 개의 헤더를 추가 할 때 충돌. 이 첫 번째 헤더의 레이아웃이

: 여기에 내가 무엇을

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:weightSum="7" 
    android:baselineAligned="false" > 

    <LinearLayout 
     android:id="@+id/unsynced_layoutt" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="6" 
     android:orientation="vertical" > 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="3dp" 
      android:background="@color/greenish" /> 

     <TextView 
      android:id="@+id/unsynced_txt" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dp" 
      android:gravity="center" 
      android:text="@string/unsynced_txt" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:text="@string/lorem_ipsum" /> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="3dp" 
      android:layout_gravity="bottom" 
      android:background="@color/greenish" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_weight="1" 
     android:id="@+id/sync_close_notification" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:background="@color/grey_bcknd"> 

     <ImageButton 
      android:id="@+id/menu_btn" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="15dp" 
      android:background="@null" 
      android:contentDescription="@string/something" 
      android:src="@drawable/notification_close_x_green" /> 
    </LinearLayout> 

</LinearLayout> 

두 번째 헤더 레이아웃 : 내가 물리적으로 추가하려고 여기

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@color/grey_bcknd" 
    android:orientation="vertical" > 

    <View 
     android:id="@+id/top_line" 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:alpha="0.25" 
     android:background="@color/grey_line" /> 

    <TextView 
     android:id="@+id/receipt_header_txt" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/top_line" 
     android:layout_marginLeft="10dp" 
     android:text="@string/active_folders" 
     android:textColor="#B4AA9E" /> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:layout_alignParentBottom="true" 
     android:layout_below="@+id/receipt_header_txt" 
     android:alpha="0.25" 
     android:background="@color/grey_line" /> 

</RelativeLayout> 

와는 :

all_adapter = new MergeAdapter(); 
     final View notification = inflater 
       .inflate(R.layout.unsynced_layout, null); 
     TextView notification_txt = (TextView) notification.findViewById(R.id.unsynced_txt); 
     notification_txt.setText("You have "+unsynced_nr+" unsynced items"); 
     all_adapter.addView(notification_txt); 

     for(int i=0;i<dates.size();i++){ 
      System.out.println("HERE "+i); 
      View header1 = inflater 
        .inflate(R.layout.receipt_list_header, null); 
      TextView date_header_txt = (TextView) header1.findViewById(R.id.receipt_header_txt); 
      date_header_txt.setText(dates.get(i)); 
      all_adapter.addView(header1); 
      ReceiptDataSource recs1 = new ReceiptDataSource(globalView.getContext()); 
      recs1.open(); 
      ArrayList<Receipt> currentReceipts = recs.findReceiptsByDate(dates.get(i), folder_id); 
      recs1.close(); 

      //ReceiptAdapter folder_receipts = new ReceiptAdapter(getActivity(), R.layout.receipt_item, R.layout.receipt_incomplete_item, currentReceipts); 
      ReceiptCustomAdapter folder_receipts = new ReceiptCustomAdapter(globalView.getContext(), R.layout.receipt_pager, 
        currentReceipts, getActivity().getSupportFragmentManager()); 
      all_adapter.addAdapter(folder_receipts); 
     } 

및 스택 트레이스 :

코드가 더 이상 충돌하지 않는

all_adapter.addView(notification_txt); 

: 내가 라인을 코멘트 경우

08-06 11:54:15.558: E/AndroidRuntime(20408): FATAL EXCEPTION: main 
08-06 11:54:15.558: E/AndroidRuntime(20408): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
08-06 11:54:15.558: E/AndroidRuntime(20408): at android.widget.ListView.measureScrapChild(ListView.java:1170) 
08-06 11:54:15.558: E/AndroidRuntime(20408): at android.widget.ListView.measureHeightOfChildren(ListView.java:1252) 

.

의견을 보내 주시면 감사하겠습니다.

+0

방법'에'의 getView()'방법을 찾습니다 ListAdapter'? – Sajmon

+0

나는 관련성이 있다고 생각하지 않는다. 어댑터가 아닌 뷰를 추가 할 때 코드가 충돌한다 ... –

+0

'getView()'메소드에서 관련성이 있다고 생각한다면 전체 대신에'TextView' 만 리턴한다. 행'보기'. – Sajmon

답변

3

MergeAdapterAbsListView.LayoutParams을 예상하므로이 문제가 발생합니다. 당신은 단순히 당신의 mergeadapter에 전체보기를 추가하려는 경우 다음 대신 all_adapter.addView(notification_txt); 당신이 말할 수있는,

final View notification = inflater.inflate(R.layout.unsynced_layout, null); 
TextView notification_txt = (TextView) notification.findViewById(R.id.unsynced_txt); 
notification_txt.setText("You have "+unsynced_nr+" unsynced items"); 
AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
notification_txt.setLayoutParams(layoutParams); 
all_adapter.addView(notification_txt); 

을 :하지만이 시도 all_adapter.addView(notification);

+0

CWAC 병합 어댑터에 익숙한가요? GitHub 소스에 대한 링크를 붙 였지만 이전에이 작업을 해본 적이 있다면 도움이 될 것입니다 ... –

+0

프로젝트에서 사용했고 행복했습니다. 나는 목록 뷰와 다른 뷰를 수직으로 스크롤 할 수 있어야하고 mergeadapter가 이것에 아주 좋았던 경우가 있었다. – gunar

+0

글쎄 그건 나에게 똑같아, 헤더가있는 목록이있어 형식은 다음과 같다. 헤더, 어댑터, 헤더, 어댑터, for 루프를 사용하여 구현 한 기능. 그건 잘 작동합니다. 것은 상단에 이것에 여분의 헤더를 추가해야합니다. 다른 레이아웃이라는 것이 문제가 될 수 있습니까? 그게 당신이 형식을 유지 해야하는지 확실하지 않은 경우입니다 : 헤더 + 어댑터 ... –