2

我正在做一个 Android 应用程序,它可以从 Web 服务获取数据并将其加载到微调器中。当我转到某个屏幕并返回时,我需要保持微调器的选定数据状态。例如,如果我从 Web 服务获取数据并将其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

4 回答 4

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 中的值检查 array[i]。如果您使用 ArrayList 而不是这部分可以通过调用在没有循环的情况下完成

 ArrayList.indexOf(prefs.getString("spinnerSelection", "");

当您提交时,显示所有上述数组项都消失了。显示没有人进入数组。

于 2013-05-03T12:24:12.437 回答
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

            }
        });
于 2014-05-21T07:13:50.507 回答
0

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

于 2013-05-03T13:00:49.673 回答
0
  • 确保您没有在活动的 OnResume() 中点击网络服务。
  • 在继续下一个活动之前,通过调用 finish() 确保您没有完成当前活动。
  • 并在网络命中前检查数据是否可用(这里可以避免不必要的网络命中)
于 2013-05-03T13:08:15.007 回答