2

我正在使用扩展 BaseAdapter 的类来填充我的布局上的 gridView。当我单击 gridView 的元素之一时,我想获取单击的项目的名称(其中名称是 R.drawable.name 中的名称)

所以这就是我写的

gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                    Intent intent = new Intent(ChoseActivity.this,
                            GameActivity.class);
                    String ab = getResources().getResourceEntryName(arg1.getId());
                    intent.putExtra("AB", ab);
                    startActivity(intent);
}
}

我有这个错误

02-27 13:46:49.285: E/AndroidRuntime(24862): FATAL EXCEPTION: main
02-27 13:46:49.285: E/AndroidRuntime(24862): android.content.res.Resources$NotFoundException: Unable to find resource ID #0xffffffff
02-27 13:46:49.285: E/AndroidRuntime(24862):    at android.content.res.Resources.getResourceEntryName(Resources.java:1499)
02-27 13:46:49.285: E/AndroidRuntime(24862):    at com.example.kersplatt.ChoseActivity$1.onItemClick(ChoseActivity.java:36)
02-27 13:46:49.285: E/AndroidRuntime(24862):    at android.widget.AdapterView.performItemClick(AdapterView.java:284)
02-27 13:46:49.285: E/AndroidRuntime(24862):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)

我不明白,因为单击的图像在我的资源中

编辑1

我在我的适配器的 getView 中尝试了这个,但仍然有同样的错误:

ImageView imageView = new ImageView(mContext);
imageView.setTag(R.drawable.currentimage);
4

5 回答 5

0
getResources().getResourceEntryName(arg1.getId());

您没有在此处指定上下文。可能:

this.getResources().getResourceEntryName(arg1.getId());

类似的东西

于 2013-05-03T19:51:28.583 回答
0

如果您的图像在资源/可绘制文件夹中的第一件事,而不是简单地创建一个类型的数组列表,arraylist<integer>接下来将所有这些图像添加到数组列表中,然后在您的适配器类中使用该数组列表(假设您知道如何膨胀自定义布局并使用您的数组列表在gridview中显示所有图像,因此对于您在问题中提出的文本,也为文本创建一个数组列表,这里的类型arraylist<Integer>只是因为它将保存资源/可绘制文件夹中的文本值(正如你所说的那样)或者你可以制作你自己的类型数组列表arraylist<String>并根据你的喜好添加一些字符串(名称)。

接下来所有的arraylist都会有一些位置,或者你可以在扩展布局的(using method imageview.setId())同时为图像设置id,并在那个imageview的clicklistener上检查或检索适配器类中的id或位置,所以在你找到位置之后,只需取值定位并搜索文本数组列表中的元素或项目(之前已经创建),并在用户单击事件发生时从数组列表特定位置获取项目,然后按照您的喜好显示或打印。如果需要有关问题的代码请让我知道并为我的英语感到抱歉。

于 2013-05-03T05:18:48.397 回答
0

没有getDrawableId功能,因此您需要在更改其可绘制对象时为 ImageView 设置标签。

在您的适配器类getview()中,将标签设置为 imageview 对象,让标签成为可绘制资源的 id。

imageview.settag(r.drawable.currentimage)

现在,当您想要 gridview 的可绘制 onClick 时,获取标签并从中获取可绘制id

int drawableId = (Integer)imageview.getTag();

您可以使用以下方法获取可绘制对象的名称

getResources().getResourceEntryName(int drawableId);
于 2013-02-27T14:05:08.953 回答
0

我花了一些时间寻找一种方法来点缀它。在您的情况下,最简单的方法是使用 arg3 ,其中包含您单击的视图的 id,如下所示

String ab = getResources().getResourceEntryName(int()arg3);
于 2014-02-06T11:36:44.937 回答
-1

是的,如果您有图像的资源 ID,您可以获得图像的名称。您可以使用 getResourceEntryName(resourceId)

如果您使用 ArrayList 作为图像路径,则使用

String name = getResources().getResourceEntryName(ArrayListName.get(arg2));

如果您使用的是数组,那么

String name = getResources().getResourceEntryName(Arrayname[arg2]);
于 2014-04-09T08:03:35.827 回答