阵列适配器从 Res 文件夹加载图像(Android 应用程序)

2023-11-30

我是一名 Android 新手。我试图通过数组适配器将 res/Drawable 文件夹中的一堆图像加载到 Gridview 中。不幸的是,每次我尝试使用 gridView 查看活动时,我的应用程序都会崩溃。我想知道如何设置 res 文件夹中图像的 imageResource 以在 Gridview 中显示。

这是我的代码:

微笑班

    public class Smiley extends Activity {
    GridView gridView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.smile);
    gridView = (GridView) findViewById(R.id.gridView1);

    String planets[] = this.getResources().getStringArray(R.array.imageme);

     ArrayAdapter<String>adapter  = new  ArrayAdapter<String>  (this,R.layout.grid_view_row,R.id.imageGrid , planets);
     gridView.setAdapter(adapter);

   }    


  }

微笑.xml

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
  android:background="@drawable/blurred"
  >

     <GridView
     android:id="@+id/gridView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:columnWidth="90dp"
     android:numColumns="auto_fit"
     android:verticalSpacing="10dp"
     android:horizontalSpacing="10dp"
     android:stretchMode="columnWidth"
     android:gravity="center"
     >
    </GridView>

 </RelativeLayout>

grid_view_row.xml(Gridview 的自定义布局)

 <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
  >

    <ImageView
    android:id="@+id/imageGrid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:padding="2dp"
    android:src="@drawable/a"
     />

  </FrameLayout> 

我的字符串数组(xml)

   <?xml version="1.0" encoding="utf-8"?>
    <resources>
   <string-array name="imageme">
   <item>@drawable/a</item>   
   <item>@drawable/b</item> 
   <item>@drawable/c</item> 
   <item>@drawable/d</item>  

   </string-array>

   </resources>

Logcat

    09-04 16:48:40.561: E/ArrayAdapter(25938): You must supply a resource ID for a           TextView
      09-04 16:48:40.568: E/AndroidRuntime(25938): FATAL EXCEPTION: main
         09-04 16:48:40.568: E/AndroidRuntime(25938): java.lang.IllegalStateException:  ArrayAdapter requires the resource ID to be a TextView
        09-04 16:48:40.568: E/AndroidRuntime(25938):    at     android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
         09-04 16:48:40.568: E/AndroidRuntime(25938):   at      android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
      09-04 16:48:40.568: E/AndroidRuntime(25938):  at android.widget.AbsListView.obtainView(AbsListView.java:2207)
      09-04 16:48:40.568: E/AndroidRuntime(25938):  at android.widget.GridView.onMeasure(GridView.java:1040)
    09-04 16:48:40.568: E/AndroidRuntime(25938):    at android.view.View.measure(View.java:15609)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645)
        09-04 16:48:40.568: E/AndroidRuntime(25938):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425)
        09-04 16:48:40.568: E/AndroidRuntime(25938):    at android.view.View.measure(View.java:15609)
      09-04 16:48:40.568: E/AndroidRuntime(25938):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
       09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.view.View.measure(View.java:15609)
       09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:850)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at android.view.View.measure(View.java:15609)
       09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
       09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
  09-04 16:48:40.568: E/AndroidRuntime(25938):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2203)
    09-04 16:48:40.568: E/AndroidRuntime(25938):    at android.view.View.measure(View.java:15609)
   09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2165)
      09-04 16:48:40.568: E/AndroidRuntime(25938):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1249)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1443)
    09-04 16:48:40.568: E/AndroidRuntime(25938):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139)
   09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879)
  09-04 16:48:40.568: E/AndroidRuntime(25938):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at android.view.Choreographer.doCallbacks(Choreographer.java:579)
  09-04 16:48:40.568: E/AndroidRuntime(25938):  at android.view.Choreographer.doFrame(Choreographer.java:548)
   09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
   09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.os.Handler.handleCallback(Handler.java:725)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at android.os.Handler.dispatchMessage(Handler.java:92)
       09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.os.Looper.loop(Looper.java:153)
  09-04 16:48:40.568: E/AndroidRuntime(25938):  at android.app.ActivityThread.main(ActivityThread.java:5297)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at java.lang.reflect.Method.invokeNative(Native Method)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   at java.lang.reflect.Method.invoke(Method.java:511)
    09-04 16:48:40.568: E/AndroidRuntime(25938):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
        09-04 16:48:40.568: E/AndroidRuntime(25938):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    09-04 16:48:40.568: E/AndroidRuntime(25938):    at dalvik.system.NativeStart.main(Native Method)
  09-04 16:48:40.568: E/AndroidRuntime(25938): Caused by: java.lang.ClassCastException: android.widget.ImageView cannot be cast to android.widget.TextView
   09-04 16:48:40.568: E/AndroidRuntime(25938):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:382)
     09-04 16:48:40.568: E/AndroidRuntime(25938):   ... 35 more

请帮忙。谢谢


问题是您尝试将 String 类型数据分配给ImageView。 修复它的最简单方法是:

  1. 将资源数组类型更改为整数数组
  2. 而不是使用简单的ArrayAdapter对于字符串数据,使用自定义适配器,例如:

    class ImgAdapter extends BaseAdapter {
    @Override
    public int getCount() {
        return planets.length;
    }
    
    @Override
    public Integer getItem(final int position) {
        return planets[position];
    }
    
    @Override
    public long getItemId(final int position) {
        return position;
    }
    
    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {
        final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_view_row, null);
        ImageView imageView = (ImageView) view.findViewById(R.id.imageGrid);
        imageView.setImageResource(getItem(position));
        return view;
    }
    }
    

就这么简单吧。最后一件事是将新适配器设置为gridView

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阵列适配器从 Res 文件夹加载图像(Android 应用程序) 的相关文章

随机推荐

  • 这可以用mysql吗?

    首先 抱歉这个标题 但也许我以后会找到更好的 我几分钟前问过这个问题 但由于我无法描述我想要什么 所以我再试一次 这是我的表结构 http sqlfiddle com 2 b25f9 37 该表用于存储用户会话 Out of this I
  • jersey JAX-RS 服务中的 BASIC 身份验证和 Tomcat 6.0 失败

    我正在尝试使用 Tomcat 6 0 和 JAX RS jersey 实现在我的服务中进行基本身份验证 以下是我遵循的实施步骤 1 添加了领域服务器 xml像这样
  • 如何使用批处理脚本计算文本文件中的行数并将值存储到变量中?

    我想计算文本文件中的行数 然后必须将值存储到环境变量中 计算行数的命令是 findstr R N file txt find C 我提到了这个问题如何使用bat脚本将命令表达式的结果存储在变量中 然后我尝试了 set cmd findstr
  • 以编程方式捕获屏幕视频

    我想知道是否可以以编程方式捕获 iPhone 屏幕的视频 我看到有一个适用于越狱设备的应用程序 所以我不知道是否有一些 合法 的方法来做到这一点 查看屏幕截图视图 内置视频录制支持 请参阅链接 它的作用是将 UIView 的内容保存到 UI
  • 找出任意数字的第一位和最后一位数字的总和

    我想编写一个程序来找出通过键盘输入的任何数字的第一个和最后一个数字的总和 例如 我输入52264 输出必须是5 4 9 是的 这是一个任务 嗯 最后一个数字很容易算出来 对吧 int lastDigit input 10 至于第一个数字 我
  • 如何在UI5中动态创建OData V2实体路径?

    我想更新用 OData 服务填充的表 我正在使用这种方法 oModel update Products 999 data 我将选定的索引存储在变量中 myVar1 并且我需要将该变量传递给路径字符串 问题是Products 999 这是与硬
  • 如何以非递归方式编写Antlr规则?

    我有以下需要解析的表达式 and true false or true false true not or true false true and and true false false or or true false true tru
  • Powershell脚本获取值

    我想使用 powershell 脚本获取默认网关 我可以按如下方式获取它 Get WmiObject Class Win32 IP4RouteTable where destination eq 0 0 0 0 and mask eq 0
  • C++ 中一系列模板参数的显式模板实例化

    创建库时 显式模板实例化非常有用 假设我有一个带有 int 参数的模板 template
  • 合并数据框中的重复行[重复]

    这个问题在这里已经有答案了 这是我过去提出的问题的延续 基本上 我有一个数据框 df Beginning1 Protein2 Protein3 Protein4 Biomarker1 Pathway3 A G NA NA F Pathway
  • 谷歌地图:给定经纬度坐标

    我有以下经纬度坐标 在 JS 数组中 我们如何在这些坐标上绘制带有标记的 Google 地图 请给出一个简单的例子 因为 API 文档中的例子并没有真正给出结论性的答案 或者对我来说太复杂了 43 82846160000000000000
  • 为什么以下代码会让我的计算机发出蜂鸣声?

    我很难理解为什么这段代码会让我的电脑发出蜂鸣声 我已将这部分代码隔离为偶尔发出蜂鸣声的部分 但我不明白它有什么问题 const int BUFFER LENGTH 8192 char buffer BUFFER LENGTH 1 int r
  • 将 Word 加载项项目清单上传到 AppSource 时持续出现问题

    我将在此处提出另一个问题 因为这是我能够从 Microsoft Office 支持团队获得有意义的响应的唯一方法 请参见这个问题对于我提出的关于这个主题的最后一个问题 答复以及我针对答复提出的问题 尚未得到答复 我正在尝试将现有的 Word
  • 从mysql中的出生日期计算年龄[重复]

    这个问题在这里已经有答案了 我在 mysql 中有一个表 其中包含出生日期列 保存为 unix 时间戳 bigint 我想写这样的查询 SELECT as age FROM tableName And SELECT FROM tableNa
  • 如何映射 pandas 中的列值?

    在我的文件中 一列包含不同的成绩 列名称 成绩 例如 91 50K 92 60K 柴油 ADBlU等 对于所有这些等级 我需要将它们分为几个等级 eg 91 50K Petrol 在我的Python中 我该怎么做 请注意 我可以将整个列传递
  • ManagedCuda:非法地址;执行内核时

    我正在 C 项目中使用 ManagedCuda 库来利用 GPU 目前我正在遵循这个tutorial关于如何在使用 OpenCV 无法实现 C 和 C 之间编写兼容的代码 我的代码似乎一切正常 找到 构建了内核并执行了方法调用 但是我收到了
  • 如何仅读取文件的每隔一行?

    我只需要读取文件的每隔一行 文件很大 所以我不想使用readlines 我不确定如何实现迭代器 因此欢迎提出任何建议 一种可能是调用 next 两次 不太吸引人 with open pth file rw as pth pth next f
  • 在Python多处理中传递共享内存变量

    我有一堆文件 我想使用 Python 的多处理并行读取这些文件 并将所有数据收集到单个 NumPy 数组中 为此 我想定义一个共享内存 NumPy 数组并将其切片传递给不同的进程以并行读取 下面的代码给出了我想要做的事情的玩具说明 我试图使
  • NSURLConnection didFailWithError 未调用?

    为什么当指定 URL 不存在图像时 didFailWithError 不会被调用 例如 NSURLRequest request NSURLRequest requestWithURL NSURL URLWithString http ww
  • 阵列适配器从 Res 文件夹加载图像(Android 应用程序)

    我是一名 Android 新手 我试图通过数组适配器将 res Drawable 文件夹中的一堆图像加载到 Gridview 中 不幸的是 每次我尝试使用 gridView 查看活动时 我的应用程序都会崩溃 我想知道如何设置 res 文件夹