2012-03-26 5 views
0

まず、私はネイティブスピーカーではないので、私はあなたが私の英語を理解してくれることを願っています。OnSeekBarChangeListener(自分のクラスにある)のビューにアクセスする必要があります

私はAndroid開発には新しく、アプリでは次のようにしています:SeekBarが必要なので、SeekbarをXML経由で作成し、OnSeekBarChangeListenerを実装しました。私が働いている会社で

は、このようなものを作成する(ため styleguidの)禁じられています:

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
{ 
@Override 
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) 
{ 
    /// Do something  
} 
... 
}); 

は、だから私はOnSeekBarChangeListenerのために自分のクラスを作成する必要があります。これまでのところ問題ありません。

public class SeekBarChangeListener extends OnSeekBarChangeListener 
{ 
public SeekBarChangeListener(Context context) 
{ 
    super(context); 
} 

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
{ 
} 

public void onStartTrackingTouch(SeekBar seekBar) 
{ 
} 

public void onStopTrackingTouch(SeekBar seekBar) 
{ 
/// Do something. Following Code wont work 
CheckBox RemeberUsername = (CheckBox)findViewById(R.id.RemeberUsername); 
/// Always gets NULL 
} 
} 

いくつかのコントロールにアクセスする方法が必要です。通常、findViewByIdはうまく動作しますが、この場合はありません。私は完全に理解できるものです。なぜなら、リスナーはビューをどのように知るべきなのでしょうか?

あなたは良いヒントをお持ちですか?

または、コントロールを取得するための最初のコードスニペットのような他の方法はありませんか?

誰かが私を助けてくれることを願っています。

+0

正確にあなたが何をしたい、あなたは私を説明することができますか? – Hasmukh

+0

スライダを使用していくつかのオプションを表示するかどうかを選択します。 SeekBarは0以上の最大値(Listenerによってハンドリングされる)のみであり、Seekbarが0の場合、チェックボックスは使用できません。 SeekBarが最大の場合、チェックボックスは使用可能でなければなりません。希望は正確にengouh? – sandkasten

答えて

0
すでに Contextへの参照を持っているリスナーのコンストラクタで

、あなたがSpinnerを作成し、おそらくActivity(あなたは()の活動にthisを渡す場合は、リスナーをインスタンス化するとき)soからあなたのContextをキャストそれにコンストラクタActivity、そのコンテキストにfindViewById()を使用します。

編集:

あなたのリスナーに間違った方法、今あなたがSeekBarウィジェットクラスを拡張され、その後、implemenを実装します(?!?!)リスナーインタフェースに接続します。リスナクラスは次のようにする必要があります:

public class SeekChanged implements OnSeekBarChangeListener { 

    private Context context; 

    public SeekChanged(Context context) { 
     this.context = context; 
    } 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, 
      boolean fromUser) {} 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) {} 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 
     SeekBarListener activity = (SeekBarListener) context; 
     CheckBox cb = (CheckBox) activity.findViewById(R.id.checkBox1); 
     cb.setText("Not null"); 
    } 

} 

はその後の活動に含むレイアウト(私は私の活動 SeekBarListenerの名前) SeekBar

//... 
SeekBar sb = (SeekBar) findViewById(R.id.seekBar1); 
sb.setOnSeekBarChangeListener(new SeekChanged(this)); 
//... 
+0

java.lang.ClassCastExceptionをスローします:/ – sandkasten

+0

..のコードを更新してください。これは渡されていません。今すぐ動作します、ありがとう! – sandkasten

+0

@sandkasten私の編集された答えを見て、私はあなたがSeekBarを拡張するのを見たことがありませんでした(なぜあなたはこれをやっていますか?)。 – Luksprog

関連する問題