带房间的AutocompleteTextView

时间:2019-12-02 09:56:30

标签: android kotlin android-room

我有一个Room db,并创建了一个模型和viewModel。我想知道如何使自动完成文本视图与数据库数据和视图模型一起使用,以根据用户类型过滤客户列表

ViewModel

class CustomerVM : ViewModel() {
    private val customers: MutableLiveData<List<Customer>> by lazy {
        loadCustomers()
    }

    fun getCustomers(): LiveData<List<Customer>> {
        return customers
    }

    private fun loadCustomers() : MutableLiveData<List<Customer>> {
        return DataModel.getInstance().roomDb.CustomerDao().getAllCustomers() as MutableLiveData<List<Customer>>
    }
}

2 个答案:

答案 0 :(得分:0)

 step 1:create custom autocomplete text view

     example:https://spapas.github.io/2019/04/05/android-custom-filter-adapter/

 step2:get data from room dp

       @Query("SELECT * FROM Gender WHERE name == :name")
       fun getGenderByName(name: String): List<Gender>

 step3:update this data to  custom autocomplete adapter

答案 1 :(得分:0)

如果我理解您希望将其作为自动完成文本的条目,请查看内部数据库中的数据。

为此,我创建了具有allStudentsData的自定义ViewModel,存储了来自活动的监听

  1. 存储库类  直接从数据库监听的存储库

    val allStudents: LiveData<List<Student>> = studentDao.getAll()

  2. ViewModel类

`priv val all学生:LiveData>    初始化{

    val studentsDao = AppDatabase.getDatabase(application,viewModelScope).studentsDao()
    studentRepository = StudentRepository(studentsDao)
    allStudents = studentRepository.allStudents
}`
  1. 活动分类

    private lateinit var studentViewModel:StudentViewModel

    公共重写乐趣onCreate(savedInstanceState:Bundle?){

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    studentViewModel = ViewModelProvider(this).get(StudentViewModel::class.java)
    studentViewModel.allStudents.observe(this, Observer { students ->
        // Update the cached copy of the students in the adapter.
        students?.let {
            val arr = mutableListOf<String>()
    
            for (value in it) {
                arr.add(value.name)
            }
            val adapter: ArrayAdapter<String> =
                ArrayAdapter(this, android.R.layout.select_dialog_item, arr)
            names.setAdapter(adapter)
        }
    })
    

    }

在活动中,我们有一个viewModel变量,用于观察在DB中插入新记录时更改的数据。 当我们有新数据Observer {}被调用时,因此使用新的学生列表,我们创建了一个可变列表,我们添加了所有学生,并设置了适配器

这样做,当数据库中的数据更改时

数据库 ====> 存储库 ====> ViewModel ====> 活动