0

スピナーがリロードされたときに、以前に選択した回答を表示する方法を探しています。

現在、ユーザーはスピナー コントロールの選択範囲から選択できます。これは XML ファイルを介して設定されます。その選択は SQLite データベースに書き込まれます - これは特定のジョブに関連しています。

私にとっての問題は、必要なジョブのデータをアプリに再ロードするときに発生します。データベースからロードされた、以前に選択した応答をスピナーに即座に表示したいと思います。

スピナーで最初に表示されたアイテムを変更する方法を見つけるために、誰かが私を正しい場所に向けることができますか?

編集:これまでにスピナーコードを追加しました。

// Terrain Spinner

        Spinner s = (Spinner) findViewById(R.id.spinnerTerrain);

        //I think it is here i need to implement the suggested answer

        s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){

        @Override
        public void onItemSelected(AdapterView<?> adapter, View v, int i, long lng) {
            Property.terrain = adapter.getItemAtPosition(i).toString();

        }

        @SuppressWarnings("rawtypes")
        @Override
        public void onNothingSelected(AdapterView arg0) {
        //do something else
        }
        });

一致する配列位置の位置を見つけるためのあなたの方法が好きで理解しています-アダプターを変更する方法について明確にすることができます(現時点ではアダプターがないようです)。

4

3 に答える 3

1

スピナーアダプターにアダプターの位置を合わせる必要があると思います。theSpinnerAdapter.setSelection(someIntegerIndicatingPosition);

位置を取得するには、それがスピナーのソースであると仮定して、ArrayList でルックアップを実行し、アイテムを見つけてその位置を取得する必要がある場合があります。このようなもの:

public int FindPositionOfItem(String itemValue)
{
    int itemPosition = 0;

    //Loop through each item in the list of spinner items
    for(String itemInList: allSpinnerItems)
    {
        //Check if the current item matches the item retrieved from the database
        if(itemInList.equals(itemValue))
        {
            break;
        }

        itemPosition++;
    }

    return result;
}

次に、データベースから値を取得したら、それをそのメソッドに渡して位置を取得します。

int positionOfSelectedItem = FindPositionOfItem(valueCapturedFromDB);
theSpinnerAdapter.setSelection(positionOfSelectedItem);

編集:スピナーアダプターとしてArrayAdapterを使用している場合は、できると思いますint position = adapter.getPosition(stringRetrievedFromDatabase)

于 2012-05-09T16:21:31.457 に答える
0

previouslySelectedデータベースに列を追加し、ORDER BYそのフィールドを使用して、以前に選択した回答をリストの一番上に表示することができます。

于 2012-05-09T16:19:54.073 に答える
0

私はあなたの質問をよく理解していませんでしたが、データベースから以前に選択したアイテムを取得した直後に、スピナーでアイテムを選択するだけでよいのではないでしょうか?

もしそうなら、あなたはこれに似たものを改善することができます:

        Spinner s = ...;
        Cursor c = getPreviouslySelectedItemFromDatabase();
        if (c != null && c.moveToFirst()) {
            String property = c.getString(c.getColumnIndexOrThrow("previous_item")); // That's the column on the db
            c.close();

            final int count = s.getAdapter().getCount();
            for (int index = 0; index < count; count++) {
                String value = (String) s.getAdapter().getItem(index);
                if (TextUtils.equals(value, property)) {
                    s.setSelection(index);
                    break;
                }
            }
        }

UI全体でスピナーの状態を維持したいだけなら、これを見てください:

        Spinner s = ...;
//After selected
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = settings.edit();
        editor.putInt(PREF_LAST_SELECTED_POS, s.getSelectedItemPosition());
        editor.commit();
//-----------------     
//At the moment you want to retain the state of the spinner 
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        int position = settings.getInt(PREF_LAST_SELECTED_POS, 0);

        s.setSelection(position);
于 2012-05-09T18:05:33.923 に答える