【问题标题】:onItemClick get ID or Name of item on arrayonItemClick 获取数组中项目的 ID 或名称
【发布时间】:2015-07-22 18:35:58
【问题描述】:

我有这个数组:

<string-array name="menu_array">
    <item name="home" >Home</item>
    <item name="new" >New</item>
    <item name="history" >History</item>
    <item id="categories" >Categories</item>
    <item id="store" >Store</item>
    <item id="configs" >Configurations</item>

我有这个:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        mDrawerLayout.closeDrawer(mDrawerList);

        Toast.makeText(SlideMenuActivity.this, "selecionado: " +  
        switch (position) {
            case 0:
                break;...

我想要什么:我希望能够使用被点击项目的 id 或名称而不是位置。 但为什么?因为每次我更改数组上的元素的顺序时,我也必须更改开关盒。 我不能使用项目的值(Home、New、...),因为它也会根据语言而变化。

<string-array name="menu_array">
    <item name="home" >Home</item>
    <item name="new" >Novo</item>
    <item name="history" >Historico</item>
    <item id="categories" >Categorias</item>
    <item id="store" >Loja</item>
    <item id="configs" >Configuracoes</item>

有什么帮助吗?

【问题讨论】:

  • 所以菜单选项的顺序发生了变化?我不认为这对用户很友好。还是我误会了?
  • 在最终版本中,没有。但是每次我想在中间添加一个新项目并且必须重新编号时,它都会让我工作过度。

标签: android arrays string onitemclick


【解决方案1】:

一种解决方案可以使用 JSONObject。例如

  <string-array name="menu_array">
    <item name="home">{"id": 1, "name": "Home"}</item>
    <item name="new" >{"id": 2, "name": "New"}</item>
    <item name="history" >{"id": 3, "name": "History"}</item>
   ....
  </string-array>

然后你必须检索它,解析 JSON,并使用一个小对象来包装信息:

 public static class Info {
   public  int id;
   public String name;

   @Override
   public String toString() {
      return name;
   }
 }

String[] array = getResources().getStringArray(R.array.menu_array);
ArrayList<Info> dataset = new ArrayList<>();
for (String s : array) {
    JSONObject jObj = new JSONObject(s);
    Info info = new Info();
    info.id = jObj.optInt("id");
    info.name =  jObj.optInt("name");
    dataset.add(info);
}

然后你将不得不改变你的适配器来处理 Info 的实例。 当您按下一个项目时,在您的 onItemClick 中,您可以轻松地在位置检索项目

Info info = (Info) parent.getItemAtPosition(position);

然后你可以在info.idswitch

【讨论】:

  • 我在 Info info = (Info) parent.getItemAtPosition(position);我是怎么处理的?
  • 您是否更改了适配器以使用 Info 类?
  • 你的意思是扩展?如果是这样,是的。首先我可以t create the Info class as static, but i dont 认为这是问题所在。
  • 我使用 Info info = dataset.get(position); 而不是 Info info = (Info) parent.getItemAtPosition(position); 让它工作。它奏效了!非常感谢!
【解决方案2】:

如果您在 getView 方法中扩展 Adapter 类,您可以为正在创建的每个视图设置标签,并且 onItemClick 方法中的视图参数返回相同的视图,您可以 getTag 并检查您想要的任何内容

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多