android - onItemClick 获取数组上项目的 ID 或名称

标签 android arrays string onitemclick

我有这个数组:

<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 或名称,而不是位置。 但为什么?因为每次我更改数组上 itens 的顺序时,我也必须更改 switch-case。 我无法使用该项目的值(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>

有什么帮助吗?

最佳答案

一个解决方案可以利用 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.plist 的实例。 当您按下某个项目时,在 onItemClick 中,您可以轻松检索该位置的项目:

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

然后您可以切换 info.id

关于android - onItemClick 获取数组上项目的 ID 或名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571338/

相关文章:

java - Android - 无法再次打开 fragment

c++ - C++中指针数组中的const限定符

python - tf.split 的输出是什么?

c++ - 索引到字符串时输出不正确

javascript - 将 Javascript 字符串传递给 php 字符串

android - 如何在 Android Studio 的命令行中执行 android 应用程序?

android - 如何指定要使用的 XML 解析器实现?

Android Studio 不会在设备上安装最新的应用程序

javascript - 未捕获的 RangeError : Maximum call stack size exceeded. jstree

arrays - 自定义字符串排序: How do I place these strings in an array in this particular order