0

値を復元するための解決策を見つけました。 populateFields() の私の新しいバージョンを参照 してください わかりましたので、ここにある Spinner と SQlite の投稿をすべて読んでいますが、探しているものに対する適切な答えが見つからないようですので、投稿しますこのシナリオ。私のアプリには2つの画面があり、デバイスでsqliteデータベースを使用して、editTextsの名前と重みフィールドを次のような文字列として保存します

String eName = name.getText().toString();
String eWeight = weight.getText().toString();// where name and weight are EditTexts

そして、私は次のように2つのスピナーを持っています

String eReps = spinReps.getSelectedItem().toString();
String eSets = spinSets.getSelectedItem().toString();

次に、これを呼び出してデータベースに追加します

long id = mDbHelper.createExercise(eName, eWeight, eReps, eSets);

ここに私の問題があります。誰かが新しいエクササイズを作成することを選択すると、スピナーに誤って入力しようとしているためにアプリがクラッシュします。これが私が現在持っているものです。

private void populateFields(){
  if(mRowId != null){ // where mRowId is the selected row from the list
    Cursor exercise = mDbHelper.fetchExercise();
    name.setText(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_NAME)));
    weight.setText(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_WEIGHT)));
// this is the part that i need help with, I do not know how to restore 
// the current items spinner value for reps and sets from the database.

    spinReps.setSelection(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS)));

    spinSets.setSelection(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_SETS))); 
}

リストアイテムをデータベースから現在の値とともに復元するには、ある種のアダプターを使用する必要があると思いますが、方法がわかりません。

誰かがこれで私を助けてもらえますか???

**以下は私の解決策です**

ArrayAdapter の repsAdapter、spinAdapter を onCreate() から移動してから、この新しい populateFields() を実装する必要がありました。

 private void populateFields(){
    if(mRowId != null){
        Cursor exercise = mDbHelper.fetchExercise(mRowId);
       // same as before
        name.setText(exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_NAME)));
       // get the string for sReps and sSets from the database
        String sReps = exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS));
        String sSets = exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_SETS));
       // use the strings to get their position in my adapters
        int r = repsAdapter.getPosition(sReps);
        int s = setsAdapter.getPosition(sSets);
       // set their returned values to the selected spinner Items
        spinReps.setSelection(r);
        spinSets.setSelection(s);
       // same as before
        weight.setText(exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_WEIGHT)));
    }
}
4

1 に答える 1

0

Spinner を位置ではなく値に設定する方法は、使用しているアダプターによって異なります。

  1. ArrayAdapter、これは簡単です:

    int position = adapter.getPosition(exercise.getString(exercise.
                     getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS)));
    spinReps.setSelection(position);
    
  2. SimpleCursorAdapter、これは少し難しいです:

    String match = exercise.getString(exercise.getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS));
    
    Cursor cursor = adapter.getCursor();
    cursor.moveToPosition(-1);
    int columnIndex = cursor.getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS);
    while(cursor.moveToNext()) {
        if(cursor.getString(columnIndex).equals(match))
            break;
    }
    spinReps.setSelection(cursor.getPosition());
    

別のタイプのアダプターを使用していて、上記のコードをそれに合わせて変更できない場合は、お知らせください。それが役立つことを願っています!

于 2012-08-08T18:34:53.603 に答える