如何在android中维护微调器状态

时间:2013-05-03 12:06:26

标签: android android-spinner

我正在做一个可以从网络服务获取数据的Android应用程序。将它加载到微调器中。当我进入某个屏幕时,我需要保持微调器的选定数据状态。回来。例如,如果我从网络服务获取数据为1.apple 2.orange 3.grapes&将它加载到微调器中,然后选择orange。当我去其他屏幕&回来后,选定的微调器数据应为orange。但它再次将数据从服务器加载到微调器中。有人可以帮我解决这个问题吗?

我的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //...

    if (Constants.SPINNER != null ) {
        spinner.setSelection( Constants.SPINNER);
    } else {
        //WebCall here for getting data
    }

    //...

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent,
            View view, int arg2, long arg3) {
                Constants.SPINNER = spinner.getSelectedItemPosition();

Constant课程中:

public static Integer SPINNER="";

4 个答案:

答案 0 :(得分:6)

您可以使用

  spinner.getSelectedItemPosition(); 

将返回一个你可以用

保存的int
  prefEdit.putInt(); 

然后当你想重新加载已保存的所有内容时,你只需要调用

  spinner.setSelection(prefs.getInt("key", default));

或尝试类似

保存:

  int selectedPosition = yourSpinner.getSelectedItemPosition()
  editor.putInt("spinnerSelection", selectedPosition);
  editor.commit();

加载:

yourSpinner.setSelection(prefs.getInt("spinnerSelection",0));

如果您使用的是数组,则应该像这样更改

 String selectedString = yourArray[yourSpinner.getSelectedItemPosition()];
   editor.putString("spinnerSelection", selectedString);
   editor.commit();

根据存储在prefs.s中的值检查array [i]如果您使用ArrayList,则可以通过调用

来完成此部分而无需循环
 ArrayList.indexOf(prefs.getString("spinnerSelection", "");

当你提交show所有上面的数组项时都没了。没有人进入阵列。

答案 1 :(得分:1)

您可以按照以下步骤操作:

您需要保存微调器的状态,这样才对您有所帮助。

1。)在创建微调器对象

后应用它
sectionNameSpinner.setSelection(getPersistedItem());

2。)根据您创建这些方法以保存微调器选定项目的状态

private int getPersistedItem() {
        String keyName = makePersistedItemKeyName();
        return PreferenceManager.getDefaultSharedPreferences(this).getInt(keyName, 0);
    }

    protected void setPersistedItem(int position) {
        String keyName = makePersistedItemKeyName();
        PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(keyName, position).commit();
    }

    private String makePersistedItemKeyName() {
        return currentUserName + "_your_key";
    }

3。)在微调器选择改变时设置其状态:

sectionNameSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parentView, View view, int position, long itemId) {

                setPersistedItem(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });

答案 2 :(得分:0)

当你“转到其他屏幕”时,你应该通过一项新活动这样做。然后,在完成新活动后,微调器选择活动将恢复,选择状态将与开始第二个活动之前一样。

答案 3 :(得分:0)

  • 确保您没有在活动的OnResume()中访问网络服务。
  • 在继续下一个活动之前,请确保您没有通过调用finish()来完成当前活动。
  • 在网络点击之前检查数据是否可用(这里可以避免不必要的网页点击)