动态加载和清除 LinearLayout 的内容

Dynamically load and clear content of LinearLayout

我有以下情况:我有一个 LinearLayout,然后我在其上添加 "cards",这是一个扩展 LinearLayout 的自定义 class。

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

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

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

对于这样的事情,您可能应该使用 Recycler View。通过这种方式,您可以回收视图,最好不要 运行 进入内存问题,并且不必使用 hacky 解决方案来检查屏幕上显示的内容和不显示的内容。

您必须实现一个 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>