如何在安卓中保持旋转器状态

3
我正在开发一个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="";
3个回答

2

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

需要保存下拉列表的状态,这将对您有所帮助。

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.) 当下拉列表项改变时,设置其状态为“spinner selection changed”:

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

            }
        });

0

当你“转到其他屏幕”时,应该通过新的活动来实现。然后,在完成该新活动后,旋转选择活动将恢复,并且选择状态将与启动第二个活动之前相同。


0
  • 请确保您不会在活动的OnResume()方法中调用webservice。
  • 在进入下一个活动之前,请确保您没有通过调用finish()方法结束当前活动。
  • 在进行网络请求之前,请检查数据是否可用(这样可以避免不必要的网络请求)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接