【问题标题】:Android setting default value from Hashmap Key for Spinner in Simple AdapterAndroid从简单适配器中的Spinner的Hashmap键设置默认值
【发布时间】:2016-10-02 16:43:15
【问题描述】:

我已经从PHP 解析了一些JSON 数据并将其显示为Spinner。数据带有键值。所以我使用了HashmapSimpleAdapter。 Spinner 仅显示值。当用户选择一个项目时,密钥将存储在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"
}

例如

活动 A

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

活动 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) {

        }
    });

当 spinner 在开始时显示时,如何在 Activity B 中默认显示该项目?

【问题讨论】:

  • 使用微调器上的setSelection(index) 设置默认项。
  • @KNeerajLal 这是一个拼写错误。我已经改变了。对我的方案有什么想法吗?

标签: android android-spinner


【解决方案1】:

为您的JSON 数据创建一个模型类,

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

将您的数据解析到这个模型类中,

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

    }
});

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多