根据Spinner值设置EditText可见性

时间:2012-05-27 20:25:32

标签: java android android-edittext android-spinner android-event

我正在尝试创建此对话框:

dialog

当Spinner设置为自定义值时,应自动显示TextEdit。我在View.setVisible()上呼叫TextView,但可见性未立即评估,但等待另一次更改 - 例如添加另一行或设置日期。

代码:

        ...
        customText = (EditText) v.findViewById(R.id.edit_custom_text);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);

        s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                SpinnerItem si = (SpinnerItem) adapterView.getItemAtPosition(i);
                evt.type = si.eventType;
                if (evt.type == EventType.CUSTOM) {
                    customText.setVisibility(View.VISIBLE);
                } else {
                    customText.setVisibility(View.GONE);
                }
            }


            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                //do nothing
            }
        });

我尝试View.invalidate()(在父视图上)和View.refreshDrawableState()没有运气:/

编辑:已达到上述代码(由调试器验证),我也尝试了View.INVISIBLE。视图不会立即刷新,只能在视图中进行另一次更改后才会刷新。

4 个答案:

答案 0 :(得分:0)

那应该有用,可能是你的布局不管怎样都不允许/识别这种变化?

尝试在布局xml文件中将其更改为INVISIBLE而不是GONE,包括(重要!)。

如果由于某种原因可行,请尝试以下方法:

customText.getParent().requestLayout(); //possibly the parent of that etc

答案 1 :(得分:0)

例如,见

    s.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView,View selectedItemView, int position, long id) {
    if ("YES".equals(s.getSelectedItem().toString().toUpperCase())) {
    youredittxt.setVisibility(View.VISIBLE);

    } else if ("NO".equals(s.getSelectedItem().toString().toUpperCase())) {
youredittxt.setVisibility(View.INVISIBLE);
}}
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
    }
    });

答案 2 :(得分:0)

作为后续问题,您是否处于主UI线程中?因为Android有一些内置的功能和策略,所以只有拥有的线程才能更改UI。 如果您在同一个帖子之外,请尝试:

customText.getHandler().post(new Runnable() {
    public void run() {
        customText.setVisibility(View.VISIBLE);
    }
});

希望这有帮助! :)

答案 3 :(得分:-1)

确认您确实到达了代码块。

 customText.setVisibility(View.GONE);