[英]Set EditText visibility based on Spinner value
我正在尝试创建此对话框:
。
当Spinner设置为自定义值时,TextEdit应该会自动出现。 我在TextView
上调用View.setVisible()
,但是可见性不会立即评估,而是等待其他更改-例如添加另一行或设置日期。
编码:
...
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
。 该视图只是不会立即刷新,而是仅在视图发生另一次更改后才刷新。
那应该行得通,可能是您的布局以某种方式不允许/识别此更改?
尝试将其更改为INVISIBLE
而不是GONE
,包括在布局xml文件中的(重要!)。
如果由于某些原因而起作用,请尝试如下操作:
customText.getParent().requestLayout(); //possibly the parent of that etc
例如看这个
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
}
});
作为后续问题,您是否在主UI线程中? 由于Android具有一些内置的功能和策略,因此只有拥有的线程才能更改UI。 如果您不在同一线程中,请尝试:
customText.getHandler().post(new Runnable() {
public void run() {
customText.setVisibility(View.VISIBLE);
}
});
希望这可以帮助! :)
验证您实际上正在到达代码块。
customText.setVisibility(View.GONE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.