0

スピナーアイテムの選択で、ボタンの可視性を VISIBLE または GONE として設定しています:-

selectUserTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                FilterUserType newUserType = FilterUserType.get(position);
                if(filter.userType != newUserType){
                    filter.userType = newUserType;
                    ScrollView mainScrollView =  (ScrollView) findViewById(R.id.mainLayout);
                    switch (newUserType) {
                    case AnyUser:
                    case CurrentUser:{
                        selectUserBtn.setVisibility(View.GONE);
                        break;
                    }
                    case SpecificUser:{
                        selectUserBtn.setVisibility(View.VISIBLE);
                        break;
                    }
                    default:
                        break;
                    }
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {}

        });

ここでの問題は、このアクションの後にビューが更新されないことですが、ページで EditText を 1 つ選択し、キーボードが起動すると、更新され、目的の動作が表示されます。

switch-case を次のように編集してみました:-

switch (newUserType) {
    case AnyUser:
    case CurrentUser:{
        selectUserBtn.setVisibility(View.GONE);
        mainScrollView.invalidate();
        break;
    }
    case SpecificUser:{
        selectUserBtn.setVisibility(View.VISIBLE);
        mainScrollView.invalidate();
        break;
    }
    default:
        break;
    }
}

しかし、これも機能していません

参考までに、私は自分のプロジェクトでテーマを使用HoloEverywhereしています。このスピナーは HoloEverywhere ウィジェットのものです。

4

2 に答える 2

7

私も同じ問題を抱えていました。holoeverywhere のスピナー クラスは、onItemSelected が呼び出された後にグラフィックを更新します。したがって、レイアウトの更新を「上書き」します。私が見つけた唯一の解決策は、ハンドラーを設定してUIを更新し、1秒後に実行することでした。このような:

Handler han = new Handler();
        han.postAtTime(new Runnable() {
            @Override
            public void run() {
                // UPDATE UI HERE
            }
        }, 1000);
于 2012-12-06T16:43:15.120 に答える