在Android中的onActivityResult()之后,Spinner重置

时间:2013-07-12 16:52:26

标签: android android-spinner

我有一个带有一堆州名的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。然而,当我从相机意图返回时,微调器仍然会重置并且不会进入我的选择。

4 个答案:

答案 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);
}