我正在开发一个 Android 应用程序,我已经到达应用程序的一部分,我需要获取 ArrayList 并为 ArrayList 中的每个字符串创建一个 ImageView。这些将显示在布局的底部并水平滚动。
我为此使用的代码是:
ArrayList<String> selectedUser = userInformation.getUserArrayList();
LinearLayout holderGUI = findViewById(R.id.holder);
Integer i = 0;
ImageView newImg;
do {
newImg = new ImageView(this);
Integer id = getResources().getIdentifier(selectedUser.get(i),"drawable",getPackageName());
newImg.setImageResource(id);
newImg.setContentDescription(selectedUser.get(i));
newImg.setAdjustViewBounds(true);
newImg.setScaleType(ImageView.ScaleType.FIT_CENTER);
holderGUI.addView(newImg);
i++;
} while (i < selectedUser.size());
此代码工作正常,因为应用程序上的每个图像文件都与 ArrayList 中可能的字符串匹配。但是,在应用程序因内存分配错误而崩溃之前,此循环仅迭代三次。我尝试将循环中的代码块粘贴五次,以确保循环没有问题,但我得到了相同的结果。
是否有更有效的方法来做到这一点,或者我是否做错了什么?任何帮助将不胜感激。
最佳答案
在将字符串转换为图像时,如果字符串大小很大,则会导致 OutOfMemoryError 并抛出异常,因此您需要处理它。
android:largeHeap="true"
android:hardwareAccelerated="false"
在 list 应用程序标记中添加以上行。
boolean isOutOfMemory = false;
try{
// Your Code here.
}catch (OutOfMemoryError ex) {
System.gc(); // clean up largeVar data
isOutOfMemory = true; // flag available for use
}
将代码添加到 try catch block 中。 我希望这对您有用。
关于java - 为什么使用 ArrayList 循环创建 ImageView 会导致内存错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50421627/