Android: заполнить TextView результатами строк (sqlite) из itemOnSelected Spinner

Я хотел бы использовать спиннер в качестве меню, чтобы иметь возможность выбрать название тренировки, после выбора TextViews (x4) будет заполнен упражнениями, относящимися к этому имени. В настоящее время Spinner загружает имена тренировок и доходит до загрузки первой тренировки в каждую из TextView"s onCreation,

При запуске приложения ошибок нет, но другие строки не загружаются в TextViews при выборе нового имени тренировки. Можно только предположить, что я допустил ошибку в логике.

Вопрос: Если это ошибка в логике, может кто-то ее идентифицировать и указать мне направление, пожалуйста?

begin.java

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_begin);

    loadSpinnerData();
    refreshTextView();



}

   public void loadTextView(){
    DataHelper dataHelper = new DataHelper(this);
    ArrayList<String> exercises = dataHelper.getExercises();



          ((TextView) findViewById(R.id.exercise1)).setText(exercises.get(0));

          ((TextView) findViewById(R.id.exercise2)).setText(exercises.get(1));

          ((TextView) findViewById(R.id.exercise3)).setText(exercises.get(2));

          ((TextView) findViewById(R.id.exercise4)).setText(exercises.get(3));


  }
    public void refreshTextView(){
    Spinner databaseR = (Spinner) findViewById(R.id.databaseR);
    databaseR.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            loadTextView();

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });

DataHelper.java

  public  String Create_ex="CREATE TABLE ExerciserEasy"
        + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, Workout VARCHAR, ExerciseOne VARCHAR,"
        +"ExerciseTwo VARCHAR, ExerciseThree VARCHAR, ExerciseFour VARCHAR );"

   public ArrayList<String> getExercises(){
    ArrayList<String> list = new ArrayList<String>();
    SQLiteDatabase db = this.getReadableDatabase();
    db.beginTransaction();
    try {
        String selectQuery = " Select * from " + Table_ex1;
        Cursor cursor = db.rawQuery(selectQuery, null);
        if(cursor.moveToFirst()){
            do{
                list.add(cursor.getString(2));
                list.add(cursor.getString(3));
                list.add(cursor.getString(4));
                list.add(cursor.getString(5));
                Log.d("HIITtimer", ""+cursor.getCount());

            }while(cursor.moveToNext());
        }
        db.setTransactionSuccessful();
    }catch (Exception e){
        e.printStackTrace();
    }finally {

        db.endTransaction();
        db.close();


    }
    return list;


}

1 ответ

Сначала вам нужно передать выбранное имя тренировки loadTextView() так что вы можете передать его getExercises() и запросить базу данных на основе этого имени, другой код выглядит нормально,

1- добавить параметр workoutName в getExercises() и использовать его в WHERE пункт

public ArrayList<String> getExercises(String workoutName){
    //codes ...
    String selectQuery = " Select * from " + Table_ex1 + " WHERE Workout ='" workoutName + "'";
    //codes ...
}

Примечание: вы можете использовать SQLiteDatabase#query() вместо запроса строки?

2- добавить параметр workoutName в loadTextView() и передать его getExercises():

public void loadTextView(String workoutName){
    //code ...
    ArrayList<String> exercises = dataHelper.getExercises(workoutName);
    //code ...
}

3 - пройти выбранную тренировку от прядильщика setOnItemSelectedListener():

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    loadTextView(databaseR.getSelectedItem().toString());
}

теперь, когда элемент выбран, loadTextView() вызывается, сообщая методу, какая тренировка была выбрана, и запрашивая базу данных, чтобы получить запись, связанную с этим именем тренировки.

Другие вопросы по тегам