我有一个带有一堆州名的Spinner。在onCreate()
中,我将其设置为默认值。 Spinner数组中的索引0是“Alabama”
String state = "California"; //preset to this
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_state_and_drivers_license);
statesSpinner = (Spinner)findViewById(R.id.states_spinner);
adapter = (ArrayAdapter<String>)statesSpinner.getAdapter();
statesSpinner.setSelection(adapter.getPosition(state));
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, RESULT_CAMERA);
}
然而,在onResult之后,Spinner又被设置为“Alabama”。这意味着它会恢复到数组的索引0,即使我认为它应该保留其现有的选定值。
编辑:我将setSelection(position)放入onCreate,onResume和onDestroy。然而,当我从相机意图返回时,微调器仍然会重置并且不会进入我的选择。
答案 0 :(得分:0)
可能调用Camera Activity不会保存你的状态,实质上是调用onDestroy。我不确定。另一个处理相机意图的question也有类似的问题。我会在onDestroy中添加一个日志,并在调用相机Activity时检查它是否被调用。另一个question也有一点意义,因为通常你的状态应该在调用一个新的Activity时保持不变。
经过一些快速研究后,由于方向变化和可能的记忆问题,似乎无法保存您的状态。您也可以按照其他答案的说法进行操作,因为自预设以来,确保onResume
始终是一个简单的解决方法。
答案 1 :(得分:0)
我通过关注这篇文章解决的这个非常简单,同样的问题确实帮助了我。
很多东西都丢失了(比如挑选的图像,微调器......等)状态,你可以通过以下链接简单地恢复。
How do I preserve the state of a selected spinner/dropdown item on orientation change?
谢谢,
答案 2 :(得分:-1)
static int position=-1;
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
View view, int arg2, long arg3) {
position=arg2;
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
@Override
protected void onResume() {
super.onResume();
if(position!=-1){
spinner.setSelection(position);
}
答案 3 :(得分:-1)
static int POSITION =0;
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
POSITION=pos;
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
@Override
public void onResume() {
super.onResume();
spinner.setSelection(POSITION);
}