Kotlin: заполнить спиннер из БД? - PullRequest
0 голосов
/ 31 декабря 2018

Я создаю приложение для Android (минимум SDK 19), которое будет полагаться на базу данных SQLite для отображения многих значений.В основном я использую язык Kotlin (v1.3.0) для своих классов и также использую библиотеку персистентности ROOM.

В настоящее время я пытаюсь понять, как правильно заполнить счетчик значениями.из запроса в Котлине.База данных написана и заполняется при первом запуске приложения.

У меня есть части, мне просто нужно назначить их вместе;Я знаю запрос, который хочу использовать для заполнения счетчика, я знаю, что должен быть SpinnerAdapter, чтобы сидеть между ними, а затем я назначаю адаптер для счетчика.

Но, синтаксически, я нахожусь впотеря.

В счетчике будут храниться значения для возможных будущих графиков (например, 1-го числа месяца, конца месяца, каждые две недели, ежеквартально, ежегодно в дату хх и т. д.)

ВВ прошлом я мог довольно легко назначить это в Java, но это использовало счетчик для заполнения видимых полей.Этот вариант использования немного отличается, так как я хочу, чтобы это были только некоторые доступные параметры, тогда мы будем использовать эти значения для записи записей в некоторые другие таблицы в базе данных.

Один из вариантов - установитьдо параметров в массиве ссылок, но в этой ситуации их будет слишком много.Как бы то ни было, у меня возникает соблазн иметь два выпадающих списка, один из которых позволяет выбирать широкие категории (скажем, Ежегодно / ежемесячно / раз в две недели / другие), а другой показывает более узкое подмножество на основе этого выбора.

Вот мой xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RecurringTxMoneyIn">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:id="@+id/moneyInName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/income_source"
            android:inputType="text"
            android:autofillHints="@string/source_of_income"
            tools:targetApi="o" />

        <EditText
            android:id="@+id/moneyInAmount"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/amount"
            android:inputType="number" />

        <Spinner
            android:id="@+id/scheduleSpinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <EditText
            android:id="@+id/moneyInStartDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/start_date"
            android:inputType="date" />
    </LinearLayout>

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Вот запрос, который я хотел бы заполнить, из моего интерфейса UserDao, в частности, только столбец sched_name (но нам понадобится pkidзаписать в БД позже):

@Dao
public interface UserDao {
//queries to retrieve data

@Query("SELECT * FROM Table_Schedule")
List<Table_Schedule> getAllSchedules();
}

Вот класс Java для моего Table_Schedule:

@Entity
public class Table_Schedule {
@PrimaryKey
private int pkid;

@ColumnInfo(name = "sched_name")
private String scheduleName;

@ColumnInfo(name = "description")
private String description;

public Table_Schedule(int pkid, String scheduleName, String description) {
    this.pkid = pkid;
    this.scheduleName = scheduleName;
    this.description = description;
}

public int getPkid() {
    return pkid;
}

public void setPkid(int pkid) {
    this.pkid = pkid;
}

public String getScheduleName() {
    return scheduleName;
}

public String getScheduleFrequency() {
    return scheduleName.split(" - ")[0];
}

public void setScheduleName(String scheduleName) {
    this.scheduleName = scheduleName;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}
}

Тогда я знаю здесь (в рамках моей деятельности Kotlin), где код долженжить, чтобы синхронизировать часть адаптера и связать все это вместе ... вот где мне нужна помощь!- МНОГО МНОГО спасибо заранее!

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity;

import kotlinx.android.synthetic.main.activity_recurring_tx_money_in2.*

class RecurringTxMoneyIn : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_recurring_tx_money_in2);
    //spinner adapter creation and assignment needs to happen here

}

}

В настоящее время я не могу заполнить счетчик, поэтому результаты недоступны.Я ожидаю, что смогу увидеть список значений внутри счетчика, когда он выбран.В идеале, в качестве второго шага я буду использовать модифицированный запрос для заполнения второго счетчика, запрашивая «частоту» и затем показывая только значения, соответствующие этой частоте.

...