我正在尝试创建此对话框:
当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
。视图不会立即刷新,只能在视图中进行另一次更改后才会刷新。
答案 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);