繁体   English   中英

实现2个Seekbars-两者都修改完全相同的文本?

[英]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.

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