2

Web サービスからデータを取得してスピナーにロードできる Android アプリを作成しています。画面に移動して戻ってくる間、スピナーの選択されたデータ状態を維持する必要があります。たとえば、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();

array[i] を prefs.if に格納されている値に対してチェックします。代わりに 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
  • アクティビティの OnResume() で Web サービスにアクセスしていないことを確認してください。
  • 次のアクティビティに進む前に、finish() を呼び出して、現在のアクティビティを終了していないことを確認してください。
  • そして、Web ヒットの前にデータが利用可能かどうかを確認します (ここで不要な Web ヒットを避けることができます)。
于 2013-05-03T13:08:15.007 に答える
0

「他の画面に移動する」ときは、新しいアクティビティを介して移動する必要があります。次に、その新しいアクティビティを終了すると、スピナー選択アクティビティが再開され、選択状態は 2 番目のアクティビティを開始する前の状態になります。

于 2013-05-03T13:00:49.673 に答える