Android 如何在没有outofMemory错误的情况下在多个GridView中加载图像和文本
我有一个布局,它有12个网格视图。我有将近150张图片,我必须将它们加载到GridView中。对于每个GridView,几乎有12张图片。当我想在2个GridView中加载图像和文本时,没有任何问题。但当我想加载3个或更多的图像时,会出现outofmemory错误。这是我在gridview1中加载图像和文本的代码 所有GridView都有这样的代码,唯一的区别是图像和文本。我在onCreate方法中使用了这些代码。当我取消GridView3和更高版本outofmemory的注释代码时,会发生错误并退出应用程序。我搜索了一下,有人说使用lazyloading或asynctask,但我不知道如何解决这个问题。我需要你的帮助。Android 如何在没有outofMemory错误的情况下在多个GridView中加载图像和文本,android,gridview,Android,Gridview,我有一个布局,它有12个网格视图。我有将近150张图片,我必须将它们加载到GridView中。对于每个GridView,几乎有12张图片。当我想在2个GridView中加载图像和文本时,没有任何问题。但当我想加载3个或更多的图像时,会出现outofmemory错误。这是我在gridview1中加载图像和文本的代码 所有GridView都有这样的代码,唯一的区别是图像和文本。我在onCreate方法中使用了这些代码。当我取消GridView3和更高版本outofmemory的注释代码时,会发生错误
谢谢。两点:首先,如果您的图像是全屏分辨率的,并且您打算一次在屏幕上显示150个图像,并且不需要以全屏分辨率显示它们,请调整它们的大小。它们消耗的内存远远超过您的需要。若你们打算一次在屏幕上显示所有的图片,那个么它们只是缩略图 第二,若你们不打算一次在屏幕上显示所有的150个,你们不应该试图同时把所有的东西都加载到内存中。你如何做到这一点取决于你如何展示这些。如果您真的试图同时在屏幕上显示所有150个,那么您的图像太大,占用了太多内存。您需要在网格中显示缩略图版本,并在全视图中显示全尺寸版本(假设您有全视图) 如果您只想显示一个部分,则只加载该部分,如果它们位于可滚动列表中,则在任意方向上加一个缓冲区。您可以知道自己在列表中的位置,因为可滚动列表触发onScroll事件,ArrayAdapter的getView方法将告诉您它正在加载的视图的位置
如果没有答案,请编辑您的问题,使其包含一个屏幕截图或您试图完成的UI模拟 我的问题有什么没人愿意回答的问题吗谢谢你,凯文。你说得对。我不需要同时加载图像。我可以并且我想在用户向下滚动时加载它们。我同时加载它们,因为我无法在用户滚动时加载它们。事实上,我做这件事很软弱。正如您所知,所有GridView都不在物理屏幕中,用户必须向下滚动才能看到它们。我希望当用户看到gridviewi-i时,从一个图像加载到十二个图像。谢谢你的帮助。
final GridviewAdapter mAdapter;
final GridView gridView0 = (GridView)findViewById(R.id.gridView1);
final ArrayList<String> listCountry;
final ArrayList<Integer> listFlag;
listCountry = new ArrayList<String>();
listFlag = new ArrayList<Integer>();
listCountry.add("text1");
listCountry.add("text2");
listCountry.add("text3");
listCountry.add("text4");
listCountry.add("text5");
listCountry.add("text6");
listCountry.add("text7");
listCountry.add("text8");
listCountry.add("text9");
//
listFlag.add(R.drawable.w1);
listFlag.add(R.drawable.w12);
listFlag.add(R.drawable.w15);
listFlag.add(R.drawable.w26);
listFlag.add(R.drawable.w28);
listFlag.add(R.drawable.w33);
listFlag.add(R.drawable.w44);
listFlag.add(R.drawable.w46);
listFlag.add(R.drawable.w50);
mAdapter = new GridviewAdapter(FirstPageActivity.this,listCountry, listFlag);
gridView0.setAdapter(mAdapter);`