【问题标题】:Android grid view on click listener get selected item单击侦听器上的Android网格视图获取所选项目
【发布时间】:2017-05-15 16:05:18
【问题描述】:

我正在尝试从 Android 开发中的网格视图中获取所选项目。这是我用来填充网格视图的可绘制列表:

private static Integer[] iconlist = {
        R.drawable.food_icon, R.drawable.transport_icon, R.drawable.entertainment_icon,
        R.drawable.bill_icon, R.drawable.others_icon, R.drawable.salary_icon,
        R.drawable.investment_icon, R.drawable.bonus_icon, R.drawable.medication_icon,
        R.drawable.drinks_icon, R.drawable.car_icon, R.drawable.mask_icon,
        R.drawable.shopping_icon, R.drawable.lottery_icon, R.drawable.pet_icon,
        R.drawable.movie_icon, R.drawable.plant_icon, R.drawable.paint_icon,
};

点击监听器上的gridview:

grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent,
                                View v, int position, long id) {

            Toast.makeText(getActivity(), "Grid Item " + (position + 1) + " Selected", Toast.LENGTH_LONG).show();
            int selected = position + 1;
            for(int i = 0; i < iconlist.length; i++){
                if(iconlist[i] == selected){

                }
            }
        }
    });

我设法根据点击获得正确的整数位置。我正在尝试做的是基于所选的drawable,我正在尝试提取字符串。

例如,当单击传输图标时,我试图从“R.drawable.transport_icon”获取“transport_icon”字符串并将其存储为字符串。但是,我不知道该怎么做。

有什么想法吗?

【问题讨论】:

  • 你想把这个 ""R.drawable.transport_icon"" 存储为字符串吗?
  • 不不,我正在尝试将“transport_icon”仅存储为字符串。
  • 先移除 position+1 以获取选中的项目。因为 iconList 也是从 0 位置开始的。
  • 我试图这样做: String iconStr = String.valueOf(iconlist[position + 1]); System.out.println(iconStr);但最终我得到了一些随机字符串,如 2130837609
  • 为什么要比较 selected == iconList[i],iconlist 包含 id(比如 0x7f010022)并且 selected 是 int 类型。

标签: java android gridview onclicklistener


【解决方案1】:

首先从整数数组(id)中定义一个drawable

Drawable drawable = context.getResources().getDrawable(iconlist[n]);

你可以得到这样的资源名称

String name = context.getResources().getResourceEntryName(ID);

这个方法应该返回你需要的。

【讨论】:

  • getDrawable 需要 API 21,但我目前的最低要求是 16。还有其他选择吗?另外,如何将drawable解析为int以提取字符串?
  • 添加 getResources()
  • 字符串名称 = context.getResources().getResourceEntryName(ID);这是我在答案测试中写的,你会在 R.drawable.TEXT 之后得到 drawable >>> 文本的名称
【解决方案2】:

您可以尝试以下方式:

Context.getResources().getResourceEntryName(R.drawable.transport_icon)

Context.getResources().getResourceName(R.drawable.transport_icon)

参考:https://developer.android.com/reference/android/content/res/Resources.html#getResourceEntryName(int)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多