2012-02-20 20 views
1

私は一番上にメニュー付きのグリッドビューを表示する単純なアプリケーションを作成しています。クリックされたメニューボタンの1つは、そのすぐ下のビューにシークバーを配置します。グリッドビュー内のアイテムのサイズを変更するには、スライダを移動します。私はその部分をうまく処理することができます、問題はseekbarを取り除こうとするときに来ます。シークバーがフォーカスを失ったときを知る方法が必要です。私はsetOnFocusChangeListenerを使ってみましたが、決して呼び出されないようです。コードの一部は、すべてが、私はシークバーはまだ表示されているリストをスクロールするときを除いて動作します アンドロイドSeekBar - フォーカスを削除すると失われました

public class MainActivity extends Activity implements OnFocusChangeListener { 
    SeekBar seek; 

    public boolean onOptionItemSelected(MenuItem item) { 
     if(item.getId() == R.id.menu_grid_size) 
     { 
      if(seek != null) { 
       seek = new SeekBar(this); 
       seek.setOnFocusChangeListener(this); 
       ... 
       layout.addView(seek, layoutparams); 
      } else { 
       layout.removeView(seek); 
       seek = null; 
      } 
     } 
    } 

    public void onFocusChange(Viewv, boolean hasFocus) { 
     layout.removeView(seek); 
    } 

} 

を下回っています。たぶんこれは、私が欲しいものをするための最良の方法ではない、どんな助けも大いに感謝されるだろう。

EDIT:上記のコードを修正して、ボタンを2回クリックするとエラーが発生するのを修正しました。

答えて

1

だから私は思っていた解決策がかなりうまくいくと思いました。 seekbarを使用しているので、私はonStopTrackingTouch()メソッドを使用して、いつ指を離してスライダをいつ削除するかを示す指標として使用します。

public void onStopTrackingTouch(SeekBar seekBar) { 
    if(seekBar != null){ 
     layout.removeView(seekBar); 
     seekBar = null; 
}