弹出式搜索栏 window

Seekbar on popup window

我在弹出窗口上有两个搜索栏 window,没问题!我的问题是,当我 return 到弹出窗口 window 时,搜索栏总是重置为 0,而不是上次设置的位置。

         SeekBar volbar1 = (SeekBar)popupView.findViewById(R.id.VolBar1);
         volbar1.setOnSeekBarChangeListener(barChange);


         SeekBar volbar2 = (SeekBar)popupView.findViewById(R.id.VolBar2);
         volbar2.setOnSeekBarChangeListener(barChange);

         barChange = new OnSeekBarChangeListener() 
         {


            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {  }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {  }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
            {



                switch (seekBar.getId())
                {
                 case R.id.VolBar1:
                     snd.setVolume((float)progress/100.0f);

                     break;

                case R.id.VolBar2:
                     sndtwo.setVolume((float)progress/100.0f);

                    break;




                }
            }
        };

您需要保存您从 onProgressChanged() 获得的当前进度,这是您的 OnSeekBarChangeListener 的一个方法。打开弹出窗口时,使用 setProgress() 初始化 SeekBar。

public class SomeActivity extends Activity{

    int currentProgr;

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

        setContentView(...);

        Button b = (Button) findViewById(R.id.yourbutton);
        b.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {

                ...

                SeekBar volbar1 = (SeekBar)popupView.findViewById(R.id.bar);
                volbar1.setProgress(currentProgr);
                volbar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                    ...

                    @Override
                    public void onProgressChanged(SeekBar seekBar, int progress,
                            boolean fromUser) {
                        currentProgr=progress;
                    }
                });

                ...

                popupWindow.showAtLocation(findViewById(R.id.b1), Gravity.CENTER, 0, 0);
            }
        });
    }

}

例如,要在设备旋转时保存进度,您需要save your instance state. 要跨多个会话保存进度,您需要将其保存为 preference.