简体   繁体   English

多个 SeekBars 侦听器

[英]Multiple SeekBars listener

I have multiple seekbar on the same view :我在同一个视图上有多个搜索栏:

barheures = (SeekBar)findViewById(R.id.barheures); // make seekbar object
        barheures.setOnSeekBarChangeListener(this); // set seekbar listener.
        // since we are using this class as the listener the class is "this"
        barminutes = (SeekBar)findViewById(R.id.barminutes);
        barminutes.setOnSeekBarChangeListener(this); 

And here is the listener:这是听众:

@Override
public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) {
    // TODO Auto-generated method stub
    Log.v("", "" + bar);
    textMinutes.setText("" + progress + "Minute(s)" );
    textHours.setText("" + progress + "Heure(s)" );
}

I wanna make something different if the first OR the second bar have moved into the same listener (is it the good practice?), but how to??如果第一个或第二个小节移动到同一个监听器中,我想做出一些不同的事情(这是一个好习惯吗?),但是怎么做?? Here I have the app that don't do what I want在这里,我的应用程序无法执行我想要的操作

Now then you have 2 seekbars with the following ids:现在,您有 2 个具有以下 ID 的搜索栏:

  1. barheures - its id: R.id.barheures barheures - 它的 ID:R.id.barheures
  2. barminutes - its id: R.id.barminutes barminutes - 它的 ID:R.id.barminutes

Now in the onProgressChanged(SeekBar bar, int progress, boolean fromUser) method, Do the following:现在在 onProgressChanged(SeekBar bar, int progress, boolean fromUser) 方法中,执行以下操作:

@Override
public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) {
    // TODO Auto-generated method stub
    Log.v("", "" + bar);

    switch (bar.getId()) {

    case R.id.barheures:
        textHours.setText("" + progress + "Heure(s)");
        break;

    case R.id.barminutes:
        textMinutes.setText("" + progress + "Minute(s)");
        break;
    }
}


    

Instead of comparing resource ids, you can also just check the SeekBar object for equality.除了比较资源 ID,您还可以只检查 SeekBar 对象是否相等。 Example:例子:

private SeekBar bar1;
private SeekBar bar2;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    ...

    bar1 = (SeekBar) findViewById(R.id.bar1);
    bar2 = (SeekBar) findViewById(R.id.bar2);

    ...
}

@Override
public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
{
    if (bar.equals(bar1))
    {
        // do something
    }
    else if (bar.equals(bar2))
    {
        // do something else
    }
}

I prefer doing it this way because then you only ever reference the id of each SeekBar resource once (in your onCreate ).我更喜欢这样做,因为那样你只会引用每个 SeekBar 资源的 id 一次(在你的onCreate )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM