我正在尝试使用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,这样我可以知道卡片何时可见并随后加载位图?
答案 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>