Kotlin:从db中填充微调器吗?

时间:2018-12-31 15:51:23

标签: android kotlin android-spinner

我正在构建一个Android应用程序(最小SDK 19),该应用程序将依赖SQLite数据库显示许多值。我主要在课堂上使用Kotlin语言(v1.3.0),并在使用ROOM持久性库。

目前,我正在努力了解使用Kotlin中的查询值填充微调框的正确步骤。在应用程序的首次运行时,将编写并填充数据库。

我有零件,我只需要将它们分配在一起即可;我知道我要用来填充微调器的查询,我知道需要在两者之间放置一个SpinnerAdapter,然后将适配器分配给微调器。

但是,从语法上讲,我很茫然。

微调器将保存未来可能的时间表的值(例如,当月1日,月底,每两周,每季度,每年xx日等)

过去,我可以很轻松地用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();
}

这是我的Table_Schedule的Java类:

@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

}

}

当前,我无法填充微调器,因此没有可用的结果。我希望能够在选择微调器时看到其值列表。理想情况下,第二步,我将使用修改后的查询来填充第二个微调器,查询以接收“频率”,然后仅显示与该频率相对应的值。

0 个答案:

没有答案