[英]Implementing 2 Seekbars - Both Modify The Exact Same Text?
我正在尝试实现第二个搜索栏,但是由于某些奇怪的原因,它们在移动搜索栏时都修改了相同的文本。 我上下查看了源代码,无法确定问题所在(我知道我正在忽略一些非常简单的内容-有人可以发现吗?)
JAVA:
private long rowID;
private EditText nameEt;
private EditText capEt;
private EditText codeEt;
private TimePicker timeEt;
private TextView ssidTextView;
private TextView sbTv;
private SeekBar bar;
private SeekBar bar2;
private SeekBar bar;
private SeekBar bar2;
private TextView textProgress,textAction;
private TextView textProgress2,textAction2;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.add_country);
bar = (SeekBar)findViewById(R.id.seekBar1);
bar.setOnSeekBarChangeListener(this);
bar2 = (SeekBar)findViewById(R.id.seekBar2);
bar2.setOnSeekBarChangeListener(this);
textProgress = (TextView)findViewById(R.id.textViewProgress);
textProgress2 = (TextView)findViewById(R.id.textViewProgress2);
textAction = (TextView)findViewById(R.id.textViewAction);
textAction2 = (TextView)findViewById(R.id.textViewAction2);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
textProgress.setText(progress+"MBPS");
}
public void onProgressChanged2(SeekBar seekBar2, int progress,
boolean fromUser) {
textProgress2.setText(progress+"MBPS");
在这里调用的唯一函数是第一个:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textProgress.setText(progress+"MBPS");
}
在此函数中,您应该检查通过了哪个SeekBar并做出相应的反应:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (seekBar.equals(bar)) {//do something for bar}
else if (seekBar.equals(bar2)) {//do something for bar2}
}
如果您的布局是用XML定义的(无论如何,您都应该在这样的简单应用中执行此操作),然后比较SeekBars ID:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (seekBar.getId() == R.id.seekbar_1) {//do something for bar}
else if (seekBar.getId() == R.id.seekbar_2) {//do something for bar2}
}
这是一个完整的解决方案
活动
public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener{
SeekBar bar1;
SeekBar bar2;
TextView textProgress1,textProgress2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar1=(SeekBar)findViewById(R.id.seekBar1);
bar2=(SeekBar)findViewById(R.id.seekBar2);
bar1.setOnSeekBarChangeListener(this);
bar2.setOnSeekBarChangeListener(this);
textProgress1=(TextView)findViewById(R.id.textView1);
textProgress2=(TextView)findViewById(R.id.textView2);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
switch (seekBar.getId()) {
case R.id.seekBar1:
textProgress1.setText(progress +" MBPS");
break;
case R.id.seekBar2:
textProgress2.setText(progress +" MBPS");
break;
default:
break;
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
activity_main Xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="39dp"
/>
<SeekBar
android:id="@+id/seekBar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/seekBar1"
android:layout_marginTop="38dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/seekBar1"
android:layout_alignParentLeft="true"
android:layout_marginBottom="38dp"
android:text="TextView Progrss 1" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/seekBar1"
android:layout_marginTop="19dp"
android:text="TextView Progrss 2" />
</RelativeLayout>
代码中的问题是,seekbar侦听器调用的方法是上面带有@override表示法的方法。
我的解决方案将在搜索完成后更改文本,如果您需要实时更改,例如:开始搜索后立即更改文本,
实现以下方法...
[ http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html#onProgressChanged(android.widget.SeekBar,int,boolean )] [1],并使用下面指定的相同逻辑...
实施
@override
public void onStopTrackingTouch(SeekBar s){
switch (arg0.getId()) {
case R.id.seekBar1:
setText("ONE");
break;
case R.id.seekBar2:
setText("TWO");
break;
default:
break;
}
}
我希望这可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.