微调器和onItemSelected

时间:2012-11-16 19:45:54

标签: android

如果我有2个微调器依赖类型ArrayList>

 spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
                         ArrayList<HashMap<String, String>> arrList = new ArrayList<HashMap<String,String>>();
                        for (HashMap<String, String> map2 : arrList) {
                            String value = map2.get("SectionID");
                            // Do something

                            Context context = getApplicationContext();

                            int duration = Toast.LENGTH_SHORT;

                            Toast toast = Toast.makeText(context, value, duration);
                            toast.show();
                        Log.d("wwwwwwwwwwwwwwwwwwww: ", value);
                        // Do something
                    }
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> adapter) {

                    }
                }); 

我喜欢这样但是kothing发生了并且logcat没有错误

2 个答案:

答案 0 :(得分:0)

  

在用户点击微调器中的项目后,我不知道如何在此数组中获取带有标记(courseid)的项目。

如果您只想从每一行获取courseid,则不需要自定义OnItemSelectedListener。简单使用:

// Let's use the regular listener     vvvvvvvvvvvvvvvvvvvvvv
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
        HashMap<String, String> map = arrList.get(position);
        String id = map.get("courseid");
        // Do something
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapter) {}
});

其中arrList是保存SimpleAdapter数据的类变量。


  

我喜欢这样但是kothing发生了并且logcat没有错误

那是因为你刚刚创建了arrList,所以为空

ArrayList<HashMap<String, String>> arrList = new ArrayList<HashMap<String,String>>();
for (HashMap<String, String> map2 : arrList) { // This arrList has no data!

您需要使用创建SimpleAdapter时使用的ArrayList。

new SimpleAdapter(this, arrList, ...);

这是必须使用的ArrayList,必须是类变量。

答案 1 :(得分:0)

你的帖子有点难以理解,但我想我有个主意。你有一个由一个arraylist填充的微调器,在每个索引上有多个hashmaps,用于微调器上的每个“梯级”。因此,当选择该项时,您希望获得所选的单个键并对其执行某些操作。我们知道,hashMap并没有真正编入索引,因此我们必须使用其他方法来实现它,对吗?

        ArrayList<HashMap<String, String>> arrList = new ArrayList<HashMap<String,String>>();

        spinner.setOnItemSelectedListener(new CustomOnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view,
                    int position, long id) {

                // for each key in the hashMap at this position..
                for (String key : arrList.get(position).keySet()) {
                    if (key == "Calculus") {
//                      do something
                    } else if (key == "Physics") {
//                      do something else
                    }
                }                                       
            }

这个想法非常简单。你可以在微调器上选择的位置的索引处获得hashMap的整个keySet,并根据它所说的内容为每个键执行一些操作。假设您只有一个键值对,这应该没有太多麻烦。

但是我不得不说你应该重新考虑一下这个设计。你有多个hashMap容器​​,每个容器只包含一个东西。这真的是浪费资源。很难推荐替代方案,因为我不知道如何使用这些数据,但你应该知道在java中制作对象并不是免费的。