动态加载和清除LinearLayout的内容

时间:2015-08-28 14:18:31

标签: android android-layout android-linearlayout

我有以下场景:我有一个LinearLayout,然后我在其上添加" cards"哪个是扩展LinearLayout的自定义类。

问题是每张卡都包含一张图片。现在,如果我有太多卡要显示,由于图像的大小,我会出现内存不足错误。

如何动态查看屏幕上当前显示的哪些卡片,只加载这些卡片的图像并将其余卡片保留为空?

我正在努力检测屏幕上当前显示的是哪张卡,哪些不是。然后,当用户滚动列表时,还要加载事件并清除图像。

2 个答案:

答案 0 :(得分:1)

对于这样的事情,您应该使用Recycler View。通过这种方式,您可以回收视图,理想情况下不会遇到内存问题,也不必使用hacky解决方案来检查屏幕上的内容以及什么不是。

答案 1 :(得分:1)

您必须实施RecyclerView,它可以为您完成工作。

    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);

    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    final Adapter adapter = new Adapter();

    recyclerView.setAdapter(adapter);

适配器:

private class Adapter extends RecyclerView.Adapter<MyViewHolder> {

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_main, viewGroup, false);

        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder myViewHolder, int i) 
        // set the content of the card
    }

    @Override
    public int getItemCount() {
        return // number of cards
    }

}

ViewHolder

private class MyViewHolder extends RecyclerView.ViewHolder {

    public TextView text;
    public TextView text2;
    public ImageView imageView;

    public MyViewHolder(View itemView) {
        super(itemView);

        text = (TextView) itemView.findViewById(/* your textView */);
        text2 = (TextView) itemView.findViewById(/* another textView */);
        imageView = (ImageView) itemView.findViewById(/* an image */);

    }
}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:design="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivityFragment">

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_view"
    />

</RelativeLayout>