我有一个关于在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;设置)不起作用?
/修改