【问题标题】:Get the name of the clicked item获取点击项的名称
【发布时间】:2013-02-27 13:48:19
【问题描述】:

我正在使用扩展 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)

我不明白,因为点击的图片在我的资源中

EDIT1

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

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

【问题讨论】:

  • 视图的 id 与其持有的可绘制资源无关。您可以将 id 设置为视图,然后通过在活动中使用例如 findViewById(id) 来访问它们。在您的情况下,如果您想检索添加到视图中的可绘制对象,那么您首先需要将视图转换为您使用的视图类型,例如 ImageView ,然后才检索可绘制对象的 id 并获取资源。
  • 这里的id指向你要查找的视图的标签。
  • 我应该怎么做才能找到drawable的名称?
  • 元素是imageview吗???
  • @lok​​oko: 即使我在适配器中执行 imageView.setTag(R.drawable.currentimage) ,我仍然有同样的错误

标签: android gridview onitemclicklistener


【解决方案1】:

没有getDrawableId 函数,所以当你改变它的drawable时你需要做一些事情,比如为ImageView设置一个标签。

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

imageview.settag(r.drawable.currentimage)

现在当你想要gridview的drawable onClick时,获取标签并从它的id获取drawable

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

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

getResources().getResourceEntryName(int drawableId);

【讨论】:

  • getView 中的 r.drawable.currentimage 是什么?如何获取点击的图片?
  • drawable 的 id,并且你需要将 onclicklistener 设置为你想要查找源的所有元素。只需使用 onclicklistener 扩展类并将 setonclicklistener 分配给“this”
  • 在您尝试过的代码中,而不是创建新对象使用 (imageview)view.findviewbyID(idofimageview),这将返回现有的 iview 元素
【解决方案2】:

如果您的图像在 resources/drawable 文件夹中,那么首先要做的就是创建一个类型为 arraylist&lt;integer&gt; 的数组列表,然后将所有这些图像添加到数组列表中,然后使用该数组列表您的适配器类(假设您知道如何扩展自定义布局并使用您的arraylist 在gridview 中显示所有图像,因此对于您在问题中提出的文本,也为文本创建一个arraylist,这里的类型将是@987654322 @ 只是因为它将保存资源/可绘制文件夹中的文本值(正如你所说的那样),或者你可以创建自己的 arraylist&lt;String&gt; 类型的数组列表,并根据需要添加一些字符串(名称)。

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

【讨论】:

    【解决方案3】:
    getResources().getResourceEntryName(arg1.getId());
    

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

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

    类似的东西

    【讨论】:

      【解决方案4】:

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

      String ab = getResources().getResourceEntryName(int()arg3);
      

      【讨论】:

        【解决方案5】:

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

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

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

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

        String name = getResources().getResourceEntryName(Arrayname[arg2]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-30
          • 1970-01-01
          • 1970-01-01
          • 2019-03-02
          相关资源
          最近更新 更多