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