onItemClick 获取数组中项目的 ID 或名称
onItemClick get ID or Name of item on array
我有这个数组:
<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或名称而不是位置。
但为什么?因为每次我改变数组中元素的顺序,我也必须改变 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>
有什么帮助吗?
如果您在 getView 方法中扩展 Adapter class,您可以为正在创建的每个视图设置标签,并在 onItemClick 方法中查看参数 returns 相同的视图,您可以 getTag 并检查任何内容你要
一个解决方案可以使用 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>
然后你必须检索它,解析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);
}
然后你将不得不改变你的适配器来处理信息实例。
当您按下一个项目时,在您的 onItemClick 中,您可以轻松地检索位于
位置的项目
Info info = (Info) parent.getItemAtPosition(position);
然后你可以 switch
在 info.id
我有这个数组:
<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或名称而不是位置。 但为什么?因为每次我改变数组中元素的顺序,我也必须改变 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>
有什么帮助吗?
如果您在 getView 方法中扩展 Adapter class,您可以为正在创建的每个视图设置标签,并在 onItemClick 方法中查看参数 returns 相同的视图,您可以 getTag 并检查任何内容你要
一个解决方案可以使用 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>
然后你必须检索它,解析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);
}
然后你将不得不改变你的适配器来处理信息实例。 当您按下一个项目时,在您的 onItemClick 中,您可以轻松地检索位于
位置的项目Info info = (Info) parent.getItemAtPosition(position);
然后你可以 switch
在 info.id