具有动态列表的旋转器不起作用


_doctorSpinner = (Spinner) findViewById(R.id.input_doctor);
final ArrayList<String> docList = new ArrayList<String>();
DataUtil.getDoctorList(this.getApplicationContext(), new ServerCallBack() {
        @Override
        public void onSuccess(JSONObject result) {
        }
        @Override
        public void onSuccess(String result) {
        }
        @Override
        public void onSuccess(JSONArray result) {
            ArrayList<String> list = new ArrayList<String>();
            list.add("Select Doctor");
            try {
                for (int i = 0; i < result.length(); i++) {
                    list.add(result.getString(i));
                }
                docList.addAll(list);
            } catch (JSONException e) {
            }
        }
    });
    final ArrayAdapter<String> docAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, docList);
    docAdapter.notifyDataSetChanged();
    docAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
    _doctorSpinner.setAdapter(docAdapter);
    _doctorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            System.out.println(position);
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });

在上面的代码中,我从服务器中获取字符串列表并在旋转器中填充。加载活动后,我无法在列表中看到第一项("选择医生")。但是,当我单击旋转器时,我可以看到这些项目并选择。然后,选择选定的项目不视为所选的。有人可以帮我吗?

预先感谢。

        _doctorSpinner = (Spinner) findViewById(R.id.input_doctor);
    final ArrayList<String> docList = new ArrayList<String>();
    DataUtil.getDoctorList(this.getApplicationContext(), new ServerCallBack() {
            @Override
            public void onSuccess(JSONObject result) {
            }
            @Override
            public void onSuccess(String result) {
            }
            @Override
            public void onSuccess(JSONArray result) {
                ArrayList<String> list = new ArrayList<String>();
                list.add("Select Doctor");
                try {
                    for (int i = 0; i < result.length(); i++) {
                        list.add(result.getString(i));
                    }
                    docList.addAll(list);
final ArrayAdapter<String> docAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, docList);
        docAdapter.notifyDataSetChanged();
        docAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        _doctorSpinner.setAdapter(docAdapter);
        _doctorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                System.out.println(position);
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
                } catch (JSONException e) {
                }
            }
        });

WebService调用在背景线程中工作,因此当您设置适配器时,您可以将列表尺寸零ialialize和setAdapter获取零,然后呼叫完成

在将数据添加到列表后调用notifyDataSetChanged();

        @Override
        public void onSuccess(JSONArray result) {
            ArrayList<String> list = new ArrayList<String>();
            list.add("Select Doctor");
            try {
                for (int i = 0; i < result.length(); i++) {
                    list.add(result.getString(i));
                }
                docList.addAll(list);
                if (null != docAdapter)
                        docAdapter.notifyDataSetChanged();
            } catch (JSONException e) {
            }
        }

编辑:

我不好,我读了一个问题。如果您看不到旋转器内部的文字,请尝试以下操作:

ArrayAdapter<String> docAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, docList);

我不相信您需要使用docAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);

最新更新