【问题标题】:Spinner with dynamic list is not working带有动态列表的微调器不起作用
【发布时间】:2017-02-23 15:07:26
【问题描述】:
_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) {

        }
    });

在上面的代码中,我从服务器获取字符串列表并填充到微调器中。加载活动时,我无法看到列表中的第一项(“选择医生”)。但是当我点击微调器时,我可以看到项目并选择。再次,选定的项目在选定时不可见。有人能帮帮我吗?

提前致谢。

【问题讨论】:

  • 确保您的微调器背景颜色与您不匹配 textColor。尝试扩充您自己的布局,而不是使用默认布局。

标签: android spinner android-spinner


【解决方案1】:
        _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 调用在后台线程中工作,因此当您设置适配器时,您的列表大小为零,因此在调用完成时初始化和 setadapter

【讨论】:

  • 谢谢。它有效,但我必须将 PatientSignupActivity.super.getBaseContext() 而不是这个传递给 ArrayAdapter 构造函数。
【解决方案2】:

在您的数据添加到列表后致电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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多