0

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

对话.

当 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

4 回答 4

1

例如看这个

    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
    }
    });
于 2012-05-28T07:51:25.157 回答
0

那应该可行,可能是您的布局以某种方式不允许/识别此更改吗?

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

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

customText.getParent().requestLayout(); //possibly the parent of that etc
于 2012-05-27T20:30:11.240 回答
0

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

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

希望这可以帮助!:)

于 2012-05-28T09:18:58.107 回答
-1

验证您是否确实到达了您的代码块。

 customText.setVisibility(View.GONE);
于 2012-05-27T20:37:17.120 回答