2013-08-10 2 views
0

Android 용 Navadfima의 CardsUI here을 사용하려고합니다. 문제는 약 1500 비트 맵 (각 하나의 카드에 간다)이며, 심지어 때 조정 제안을 사용하여 DevDocs 나는 메모리가 부족합니다. 현재 나의 계획은 CardUI 액티비티에 onScrollListener를 설정하는 것이지만 코드에서 호출 할 수있는 라이브러리에서이를 작성하는 방법을 모르겠습니다. 라이브러리에서Android 용 카드 UI setScrollListener

CardUI 클래스입니다 here

내 클래스 :

public class FragmentCardsUI extends Fragment{ 
private CardUI mCardView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    View rootView = inflater.inflate(R.layout.activity_card, container, false); 
    getActivity().setTitle("Cards UI"); 

    // init CardView 
    mCardView = (CardUI) rootView.findViewById(R.id.cardsview); 

    try { 
     setCards(); 
    } catch (NullPointerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    mCardView.refresh(); 
return rootView; 

카드가 표시되고 이후에로드 할 때 나는 내가 그래서 내가 말할 수있는 내 코드에 onScrollListener을 설정할 수 있습니다 CardUI을 수정하는 방법 그것에 비트 맵?

답변

0

이렇게 좋은 해결책을 찾지 못했기 때문에 라이브러리를 Nostra's Universal Image Loader으로 바꿨습니다. 이 라이브러리는 CardUI 라이브러리 (7 개월 넘게 변경되지 않았지만 많은 요청이 있음)와는 달리 개발중인 것으로 보입니다.

0

com.fima.cardsui.StackAdapter.java getView (int position, View convertView, ViewGroup parent) 메소드를 살펴 보았습니까?

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final CardStack stack = getItem(position); 
    stack.setAdapter(this); 
    stack.setPosition(position); 

    // TODO: caching is not working well 

    // if (convertView != null) { 
    // CardStack tagStack = (CardStack) convertView.getTag(); 
    // ArrayList<Card> tagCards = tagStack.getCards(); 
    // ArrayList<Card> cards = stack.getCards(); 
    // Card lastTagCard = tagCards.get(tagCards.size()-1); 
    // if (!lastTagCard.equals(cards.get(cards.size()-1))) { 
    // convertView = stack.getView(mContext); 
    // convertView.setTag(stack); 
    // } 
    // } else if (convertView == null) { 
    convertView = stack.getView(mContext, mSwipeable); 
    // convertView.setTag(stack); 
    // } 

    return convertView; 
} 

저는 그것이 당신이 오메를 얻는 이유라고 생각합니다. ViewHolder 패턴을 사용하지 않고 모든 것을 다시로드하려고 시도합니다.

또한 com.fima.cardsui.objects.CardStack을 살펴보면 1500 개의보기를 만들 때 어떤 일이 발생하는지 알 수 있습니다.

소스를 수정하는 것이 좋습니다.

+0

ViewHolder가 문제를 해결할 것이라고 생각하십니까? 나는 많은 비트 맵과 캐싱이 없기 때문에 OME를 얻고 있다고 가정했다. ViewHolder를 포함하도록 수정하겠습니다 (이전에는 들어 보지 못했지만 유용하게 들립니다). – easycheese

+0

ViewHolder를 추가하려고 시도했지만 어디로 갈지 잘 모르겠습니다 ... 또한 CardStack을 살펴본 결과 getView에서 수정해야 할 것을 볼 수 없습니다 – easycheese

+0

ViewHolder 사용의 개념은 보이는 뷰만로드하는 것입니다. 그래서 10 개의 비트 맵이 있다고 말하면 다른 1490 비트 맵을로드하지 않는다는 것을 의미합니다. – Milan

0

경우에 따라 CardsUI Lib에 대한 스크롤을 구현하려고합니다. 다음을 추가하십시오.

android:stackFromBottom="true" 
android:transcriptMode="alwaysScroll" 

lines는 cards_view.xml 레이아웃에 추가해야합니다. 다음은 파일 업데이트 후의 모습입니다 :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<com.fima.cardsui.views.QuickReturnListView 
    android:id="@+id/listView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="4dp" 
    android:listSelector="@android:color/transparent" 
    android:overScrollMode="never" 
    android:paddingLeft="0dp" 
    android:paddingRight="0dp" 
    android:scrollbars="vertical" 
    android:stackFromBottom="true" 
    android:transcriptMode="alwaysScroll"> 
</com.fima.cardsui.views.QuickReturnListView> 

<FrameLayout 
    android:id="@+id/sticky" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" /> 

</FrameLayout>