如何使用基于ID的机制从字符串数组中获取项目?

f_ficarola

问题很简单。我已经在Android中实现了导航抽屉。现在,我有了一个菜单,其中每个项目都是string-arrayin中的一个项目strings.xml每次用户单击菜单项之一时,都会创建一个片段。在片段类中,我想switch在各个项目中使用适当的信息填充主要内容。我知道的唯一方法是检查项目的位置,但是如果将来我还要再添加一个项目,会发生什么情况?我将需要更改代码中的所有位置值。

因此,我想知道是否有一种方法可以为每个元素分配一种ID。我在这里阅读为每个变量定义一个单独的字符串,但是如何检查这些值呢?我按以下方式尝试过,但它给了我一个Constant expression required错误:

Resources resources = getResources();
    switch(item_string) {
        case resources.getString(R.string.item1):
            //TODO
        case resources.getString(R.string.item2):
            //TODO
        ...
f_ficarola

正如Selvin所建议的那样,我创建了一个JSON文件,assets/其中JSON数组的每个元素对应于一个包含三个字段(id,name和icon)的菜单项,例如:

[
    {"id": 1, "name": "item1", "icon": "icon1"}, 
    {"id": 2, "name": "item2", "icon": "icon2"}, 
    {"id": 3, "name": "item3", "icon": "icon3"}, 
    {"id": 4, "name": "item4", "icon": "icon4"}
]

然后,我首先创建了一个Item映射JSON对象类:

public class Item {
    private int id;
    private String name;
    private String icon;

    public Item(JSONObject object) {
        try {
            this.id = object.getInt("id");
            this.name = object.getString("name");
            this.icon = object.getString("icon");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    // Factory method to convert an array of JSON objects into a list of objects
    // User.fromJson(jsonArray);
    public static ArrayList<Item> fromJson(JSONArray jsonObjects) {
    ArrayList<Item> items = new ArrayList<Item>();
    for (int i = 0; i < jsonObjects.length(); i++) {
        try {
            items.add(new Item(jsonObjects.getJSONObject(i)));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    return items;
    }

}

和相应的适配器:

public class ItemAdapter extends ArrayAdapter<Item> {

    public ItemAdapter(Context context, ArrayList<Item> items) {
        super(context, 0, items);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // Get the data item for this position
        Item item = getItem(position);
        int item_id = item.getId();
        String item_name = item.getName();
        int item_icon_id = parent.getContext().getResources().getIdentifier(item.getIcon(),
                "drawable", parent.getContext().getPackageName());

        // Check if an existing view is being reused, otherwise inflate the view
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.drawer_list_item, parent, false);
        }

        // Lookup view for data population
        ImageView item_icon_view = (ImageView) convertView.findViewById(R.id.item_icon);
        TextView item_name_view = (TextView) convertView.findViewById(R.id.item_name);

        // Populate the data into the template view using the data object
        item_name_view.setText(item_name);
        item_icon_view.setImageResource(item_icon_id);

        // Return the completed view to render on screen
        return convertView;
    }
}

最后,在我的活动中,我传递了所选项目的ID:

Fragment fragment = new MainFragment();
Bundle args = new Bundle();
args.putInt(MainFragment.ARG_ITEM_ID, item.getId());
args.putString(MainFragment.ARG_ITEM_NAME, item.getName());
fragment.setArguments(args);

然后按如下所示切换片段:

int item_id = getArguments().getInt(ARG_ITEM_ID);

switch(item_id) {
    case 1:
        [...]

    case 2:
        [...]

[...]

希望我的榜样可以帮助其他人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Java中的字符串数组中获取项目?

来自分类Dev

如何从json获取基于id的字符串

来自分类Dev

Python如何基于列表中的项目从字符串中剥离字符串

来自分类Dev

如何从基于JavaScript中某些字符的字符串中获取子字符串?

来自分类Dev

如何基于C中的变量创建字符串数组

来自分类Dev

如何基于熊猫中的位置获取子字符串?

来自分类Dev

使用基于字符串中的字符的比较器对字符串数组进行排序

来自分类Dev

如何在集合中获取所有文档的ID并存储在字符串数组中?

来自分类Dev

如何使用VBA在MS Word中基于标签获取单独的字符串?

来自分类Dev

如何从Java中的字符串数组获取数组键

来自分类Dev

如何转换字符串数组中的项目?

来自分类Dev

如何删除字符串数组中的项目?

来自分类Dev

如何在CheckListBox中获取选中的项目字符串

来自分类Dev

无法使用 PowerShell 从字符串数组中循环项目

来自分类Dev

从数组jquery中的基于子字符串中删除项目

来自分类Dev

获取数组中的字符串字符

来自分类Dev

如何基于sqlite中的字符串使用order

来自分类Dev

如何遍历数组并基于字符串值删除项目

来自分类Dev

如何从Powershell管道中获取字符串数组?

来自分类Dev

如何从以字符串表示的数组中获取特定信息?

来自分类Dev

如何在Ruby中获取总和的字符串数组

来自分类Dev

如何从以字符串表示的数组中获取特定信息?

来自分类Dev

如何从数组或字符串中获取数字值?

来自分类Dev

如何获取不同数组中的拆分字符串

来自分类Dev

如何从流中获取字符串数组值?

来自分类Dev

如何只从字符串数组中获取数字?

来自分类Dev

使用定界字符串,如何获取数组项?

来自分类Dev

使用定界字符串,如何获取数组项?

来自分类Dev

如何使用字符串从嵌套数组中获取值

Related 相关文章

  1. 1

    如何从Java中的字符串数组中获取项目?

  2. 2

    如何从json获取基于id的字符串

  3. 3

    Python如何基于列表中的项目从字符串中剥离字符串

  4. 4

    如何从基于JavaScript中某些字符的字符串中获取子字符串?

  5. 5

    如何基于C中的变量创建字符串数组

  6. 6

    如何基于熊猫中的位置获取子字符串?

  7. 7

    使用基于字符串中的字符的比较器对字符串数组进行排序

  8. 8

    如何在集合中获取所有文档的ID并存储在字符串数组中?

  9. 9

    如何使用VBA在MS Word中基于标签获取单独的字符串?

  10. 10

    如何从Java中的字符串数组获取数组键

  11. 11

    如何转换字符串数组中的项目?

  12. 12

    如何删除字符串数组中的项目?

  13. 13

    如何在CheckListBox中获取选中的项目字符串

  14. 14

    无法使用 PowerShell 从字符串数组中循环项目

  15. 15

    从数组jquery中的基于子字符串中删除项目

  16. 16

    获取数组中的字符串字符

  17. 17

    如何基于sqlite中的字符串使用order

  18. 18

    如何遍历数组并基于字符串值删除项目

  19. 19

    如何从Powershell管道中获取字符串数组?

  20. 20

    如何从以字符串表示的数组中获取特定信息?

  21. 21

    如何在Ruby中获取总和的字符串数组

  22. 22

    如何从以字符串表示的数组中获取特定信息?

  23. 23

    如何从数组或字符串中获取数字值?

  24. 24

    如何获取不同数组中的拆分字符串

  25. 25

    如何从流中获取字符串数组值?

  26. 26

    如何只从字符串数组中获取数字?

  27. 27

    使用定界字符串,如何获取数组项?

  28. 28

    使用定界字符串,如何获取数组项?

  29. 29

    如何使用字符串从嵌套数组中获取值

热门标签

归档