动态加载和清除 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>
我有以下情况:我有一个 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>