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

时间:2015-07-22 18:35:59

标签: 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>

任何帮助?

2 个答案:

答案 0 :(得分:2)

一个解决方案可以使用JSONObject。 E.g。

pcap_fopen_offline()

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

  <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>

然后,您将不得不更改适配器以处理Info的实例。 按下某个项目时,在onItemClick中,您可以使用

轻松检索到位的项目
 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 info = (Info) parent.getItemAtPosition(position);

switch

答案 1 :(得分:1)

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