[英]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.