0

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

图书馆的 CardUI 类在这里

我的课:

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 以便我可以判断卡片何时可见并随后将位图加载到它?

4

3 回答 3

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 个视图时会发生什么。

建议你修改源码。

于 2013-08-10T02:41:49.580 回答
0

从来没有找到一个好的解决方案,所以我切换库以使用Nostra 的 Universal Image Loader。与 CardsUI 库相比,这个库似乎仍在开发中(7 个月来没有变化,但有很多请求)。

于 2013-08-13T15:47:41.387 回答
0

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

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

您需要在 cards_view.xml Layout 中添加行。以下是更新后文件的外观:

<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>
于 2014-04-22T02:38:30.747 回答