多个SeekBars监听器

时间:2012-01-03 22:37:54

标签: android android-layout seekbar

我在同一个视图上有多个搜索栏:

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); 

以下是清单:

@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)" );
}

如果第一个或第二个栏已移入同一个列表器中,我想做一些不同的东西(这是一个好习惯吗?),但是如何?在这里,我的应用程序没有做我想要的^^

非常感谢

2 个答案:

答案 0 :(得分:18)

现在,您有2个搜索栏,其中包含以下ID:

1)barheures - 它的id:R.id.barheures 2)barminutes - 其id:R.id.barminutes

现在在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;
    }
}

答案 1 :(得分:5)

您也可以只检查SeekBar对象是否相等,而不是比较资源ID。例如:

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
    }
}

我更喜欢这样做,因为那时你只需要引用一次SeekBar资源的id(在onCreate中)。

相关问题