2

我有一个带有一堆州名的 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

4 回答 4

0

调用Camera Activity可能不会保存您的状态,本质上是调用onDestroy。我不确定。也涉及相机意图的另一个问题也有类似的问题。我会在 onDestroy 中添加一个日志,并在调用相机 Activity 时检查它是否被调用。这个另一个问题也有点道理,因为通常你的状态在调用一个新的 Activity 时应该保持不变。

经过一些快速研究后,似乎由于方向变化和可能的内存问题,您的状态无法保存。您也可以按照其他答案所说的去做,因为由于它是预设的,因此确保它始终处于打开状态onResume将是一个简单的解决方法。

于 2013-07-12T17:10:07.380 回答
0

它真的很简单,我通过关注这篇文章解决了同样的问题真的对我有帮助。

许多东西在那里丢失(如拾取的图像、微调器等)状态,您只需通过以下链接即可恢复。

如何在方向更改时保留选定微调器/下拉项的状态?

谢谢,

于 2015-10-16T10:49:52.503 回答
-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);
        }
于 2013-07-12T17:06:07.323 回答
-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);
}
于 2016-06-10T12:10:40.027 回答