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