以下是我试图解决的问题的描述:
每当用户移动两个滑块中的任何一个时,都会调用ToneGenerator类的onProgressChanged方法。通过运行连接到笔记本电脑的应用程序验证这一点,并使用日志记录窗口跟踪从日志中获取的onPress消息。当滑块一直向左并一直向右时获得的进度值是多少?
由于无论移动了哪个滑块,都会调用相同的方法,我们如何确定移动的滑块?提示:检查方法的参数。
发送给该方法的参数之一是seekBar,它是一个指向移动滑块的对象引用。通过在其API中使用方法确定此对象的ID(一旦您键入对象引用后跟一个点,AndroidStudio会帮助解决此问题)。在方法顶部添加一个print语句,以在Logcat中显示此ID。
保存应用并在设备上重新运行。移动滑块并记下日志中显示的ID。
可以从布局视图中获取任何控件的实际ID。在方法顶部添加第二个print语句,以显示两个滑块的ID。回想一下,当您在Java中引用它时,必须在XML ID前面加上“R.id。”。 “
我遇到了最后一段的问题。
以下是代码:
package jr.eecs1022.tonegenerator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SeekBar;
public class ToneGenerator extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener
{
private ToneEmitter toneEmitter = null;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
if (toneEmitter != null)
{
System.out.println();
System.out.println(seekBar.getId());
System.out.println("onPress called with " + progress);
}
}
public void onStartTrackingTouch(SeekBar seekBar)
{
}
public void onStopTrackingTouch(SeekBar seekBar)
{
}
private void setFrequency(double frequency)
{
System.out.println("setFrequency called with " + frequency);
}
private void setAmplitude(double amplitude)
{
System.out.println("setAmplitude called with " + amplitude);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tone_generator);
SeekBar seekbar = (SeekBar) findViewById(R.id.changeAmplitude);
seekbar.setOnSeekBarChangeListener(this);
seekbar = (SeekBar) findViewById(R.id.changeFrequency);
seekbar.setOnSeekBarChangeListener(this);
}
@Override
public void onResume()
{
super.onResume();
toneEmitter = new ToneEmitter();
this.setAmplitude(0.0);
this.setFrequency(ToneEmitter.NOTE_C);
SeekBar seekBar = (SeekBar) findViewById(R.id.changeAmplitude);
seekBar.setProgress(0);
seekBar = (SeekBar) findViewById(R.id.changeFrequency);
seekBar.setProgress(0);
}
@Override
public void onPause()
{
toneEmitter.shutdown();
toneEmitter = null;
super.onPause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_tone_generator, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings)
{
return true;
}
return super.onOptionsItemSelected(item);
}
}
答案 0 :(得分:0)
这意味着您可以使用R
类来引用任何控件的ID。
所以,要试一试,它说你应该将以下内容添加到onProgressChanged方法的顶部:
System.out.println(R.id.slider1 + " " + R.id.slider2); //Use the actual id of the sliders