2

我的应用需要列出一项特定活动的文本和图像。列表的每一行有 2 列 - 1 列用于图像,1 列用于字符串。

如果图像数量很少(十个或更少),它就可以工作。当它超过 10(有时是 15)时,应用程序将崩溃。如何使这适用于十多个图像?

以下是列出文本和图像的代码。前 2 行从 strings.xml 检索数据。谢谢。

            pic=res.obtainTypedArray(R.array.site_pic);
            arr_site = getResources().getStringArray(R.array.site_name); 

    TableLayout tl = (TableLayout)findViewById(R.id.myTableLayout);

    for(int i=0; i<num_site; i++)
    {
         final TableRow tr = new TableRow(this);

         tr.setLayoutParams(new LayoutParams(
                        LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT));
         tr.setPadding(0, 10, 0, 10);

         ImageView iv = new ImageView(this);
         iv.setImageDrawable(pic.getDrawable(i));
         iv.setAdjustViewBounds(true);
         iv.setMaxHeight(80);
         iv.setPadding(5, 5, 15, 5);             
         tr.addView(iv);

         TextView tv1 = new TextView(this);
         tv1.setText(arr_site[i]);
         tv1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                 LayoutParams.WRAP_CONTENT));
         tv1.setGravity(Gravity.LEFT);           
         tr.addView(tv1);

         tl.addView(tr,new TableLayout.LayoutParams(
                 LayoutParams.FILL_PARENT,
                 LayoutParams.WRAP_CONTENT));                            
    }
4

2 回答 2

3

如果您的图像尺寸是高分辨率的,那可能就是问题所在。根据我的经验,尽一切可能减小图像尺寸 - 但保持质量至关重要。

此外,如果所有其他方法都失败了,一个简单的修复(如果你还没有尝试过)是添加

机器人:大堆=“真”

<application>您的 AndroidManifest.xml 文件的标签中。这是我自己的清单文件中的一个示例:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:largeHeap="true">
于 2015-07-09T05:21:14.263 回答
1

使用ViewHolder逻辑。当您使用 ViewHolder 时,您的图像只是在滚动时替换为其他图像。另外,我建议您可以使用GridView显示您所说的项目。

这是参考:http: //developer.android.com/training/improving-layouts/smooth-scrolling.html

这是一个教程: http: //www.learn2crack.com/2014/01/android-custom-gridview.html

于 2015-07-09T07:47:21.207 回答