簡體   English   中英

根據Spinner值設置EditText可見性

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM