2

ユーザーが移動したときにシークバーの値を表示したいと思います。これは、Contacts ListView がスクロールしたときに現在のセクションの文字を表示するのと同じです (Android 2.3.x)。

誰でもそれを実装する方法について提案がありますか? OnSeekBarChangeListener の onProgressChanged() メソッドで Toast を考えていましたが、Toast を show() するためのコンテキストを取得するのに問題がありました。

編集: また、シークバーは ListView の行にあるため、OnSeekBarChangeListener は通常の「Activity」ではなく ArrayAdapter を拡張するクラスにあるため、getBaseContext() などはメソッドで使用できません。

4

2 に答える 2

1

あなたが使用することができます:

Toast.makeText(Main.this, "Message", Toast.LENGTH_LONG).show();

また

Toast.makeText(getBaseContext(), "Message", Toast.LENGTH_LONG).show();

最初の方法:Applicationクラスをグローバルに使用する

public class MyApp extends Application {
    private static MyApp instance;

    public static MyApp getInstance() {
        return instance;
    }

    public static Context getContext(){
        return instance.getApplicationContext();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
}

2番目の方法:Context クラスコンストラクターまたはクラス内のメソッドに 渡します

于 2012-04-04T21:29:06.317 に答える
1

返信ありがとうございます。私は両方の提案から少し使用してこれを思いついたが、500msでも、ToastはseekBarの変更に追いつくのに十分な速さで更新されない。うーん...

public class adapListControl extends ArrayAdapter <String>
{
   final Context mCtx;
   ...

   public adapListControl (Context context, int textViewResourceId)
   {
      super (context, textViewResourceId);
      this.mCtx = context;
   }
   ...

   OnSeekBarChangeListener osbl = new OnSeekBarChangeListener ()
   {
      @Override
      public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser)
      { 
         Log.d (TAG, " prog change:" + progress);
         Toast.makeText(mCtx, "" + progress, 500).show();
      }
      ...
   }
于 2012-04-05T13:47:50.327 に答える