Android 为简单适配器中的微调器设置 Hashmap Key 的默认值

Android setting default value from Hashmap Key for Spinner in Simple Adapter

我已经从PHP解析了一些JSON数据并将其显示为Spinner。数据来自Key-Value。所以我把 HashmapSimpleAdapter 一起使用了。微调器仅显示值。当用户选择一个项目时,密钥将存储在 MySQL.

这是我的 JSON,

{
    "32":"Western Food",
    "33":"Chinese Food",
    "34":"Mix Food",
    "35":"Japanese Food",
    "36":"Korean Food",
    "37":"Italian Food",
    "38":"German Food",
    "45":"Muslim food ",
    "46":"Indian food"
}

例如

Activity一个

用户添加新类别,他们选择了"Mix Food"。当他们点击提交按钮时,密钥 - “34” 将存储在数据库中。

Activity B

int get_selected_item_id=34;

List<HashMap<String, String>> category_arraylist = new ArrayList<HashMap<String, String>>();
Iterator<String> iterator = jsonObject1.keys();
    while (iterator.hasNext()) {

        String id = iterator.next();
        String name=jsonObject1.getString(id);
        HashMap<String, String> map = new HashMap<>();
        map.put("id",id);
        map.put("name",name);
        category_arraylist.add(map);

    }

    String[] from = {"name"};
    int[] to = {android.R.id.text1};
    final SimpleAdapter adapter = new SimpleAdapter(item_edit.this, category_arraylist, android.R.layout.simple_spinner_dropdown_item, from, to);
    category.setAdapter(adapter);

    category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            category.setSelection(get_selected_item_id); // doesn't work
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

如何在 Activity B 中当微调器显示在开始时默认显示此项目?

为您的 JSON 数据创建模型 class,

private class Item {
    String key;
    String value;

    public Item(String key, String value) {
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

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

将您的数据解析到此模型中 class,

List<Item> list = new ArrayList<>();
Iterator<String> iterator = jsonObject1.keys();
while (iterator.hasNext()) {
    String id = iterator.next();
    String name = jsonObject1.getString(id);
    list.add(new Item(id, name));
}

初始化 Spinner,

final ArrayAdapter<Item> adapter = new ArrayAdapter<Item>(this, android.R.layout.simple_spinner_dropdown_item, list);
category.setAdapter(adapter);

list 中找到 get_selected_item_id 的索引并使用 SpinnersetSelection 方法将其设置为默认值。

int index = findIndexOf(list, get_selected_item_id);
if (index != -1) {
    category.setSelection(index);
}

findIndexOf方法,

private int findIndexOf(List<Item> list, int selectedKey) {
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).getKey().equals(String.valueOf(selectedKey))) {
            return i;
        }
    }
    return -1;
}

ItemSelectedListener,

category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
        // get selected item using position argument
        Item selectedItem = list.get(position);
        // your code
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});