onCreate中的SeekBar setProgress()

时间:2015-05-30 20:36:58

标签: android restore seekbar oncreate

我有一个关于在onCreate中设置SeekBar进度的问题 首先是最小的工作实例:

布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="buttonClicked" />

</LinearLayout>

这里的活动:
应用程序启动时 - &gt; seekBar是max(OK)
当屏幕旋转时 - &gt; seekBar应该是min(只有android:saveEnabled =&#34; false&#34;)

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar1);
        EditText editText = (EditText) findViewById(R.id.editText1);

        if (savedInstanceState == null)
            seekBar.setProgress(seekBar.getMax());
        else {
            seekBar.setProgress(0);

            editText.setText("myText");
        }

        Toast.makeText(getApplicationContext(), "progress: " + seekBar.getProgress() + "\ttext: " + editText.getText(), Toast.LENGTH_LONG).show();

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

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

    public void buttonClicked(View view) {
        SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar1);
        EditText editText = (EditText) findViewById(R.id.editText1);

        seekBar.setProgress(0);
        editText.setText("myText");
    }
}

EDIT2
吐司显示的内容:
1st onCreate:progress 100 text:
2nd onCreate:progress 0 text:myText

但是这个场景显示了什么:
1st onCreate:progress 100 text:
2nd onCreate:progress 100 text:
/ EDIT2

在我看来,应该在恢复后设置的进度值(在这种情况下为0)被覆盖,但我无法想象为什么。
修改
我很清楚super.onCreate()恢复已保存的状态(在销毁活动之前自动保存的进度,如果条形未被更改则为max,或者用户更改了条的任何其他值) seekBar及其先前的进程,但设置新的进度值之后完成。

任何人都可以解释这种行为(特别是为什么恢复使用super.onCreate后的setProgress()如果android:saveEnabled =&#34; true&#34;设置)不起作用? /修改

0 个答案:

没有答案