CardsUI for Android setScrollListener

时间:2013-08-10 01:50:59

标签: android eclipse listener google-now

我正在尝试使用Navadfima的CardsUI for Android here。问题是我有大约1500个位图(每个位图都在卡上),即使在DevDocs使用缩放建议时我内存不足。我目前的计划是在CardUI活动中设置一个onScrollListener,但我不知道如何在我可以从我的代码中调用的库中创建一个。

图书馆的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;

如何修改CardUI以便我可以在我的代码中设置onScrollListener,这样我可以知道卡片何时可见并随后加载位图?

3 个答案:

答案 0 :(得分: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;
}

我相信,这就是你获得OME的原因。它不使用ViewHolder模式,而是尝试再次加载所有内容。

还查看了com.fima.cardsui.objects.CardStack,你可以猜到当你尝试创建1500个视图时会发生什么。

我建议你修改来源。

答案 1 :(得分:0)

从来没有找到一个好的解决方案,所以我切换库使用Nostra's Universal Image Loader。这个库似乎仍处于开发阶段而不是CardsUI库(7个月内没有变化,但有很多请求)。

答案 2 :(得分:0)

如果你想为CardsUI Lib实现向下滚动。只需添加以下内容:

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

您需要在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>