Просмотр изменений не правильно - PullRequest
0 голосов
/ 28 октября 2019

Хорошо с самого начала, у меня есть RecyclerView, где я хочу изменить цвет записей, если они нажаты.

Recyclerview получает список из базы данных, куда я добавил значение bool, если выбрано представление.

В моем держателе я проверяю, выбрано ли представление, и меняю цвет с помощьюселектор.

Пока все хорошо, но теперь есть проблема.

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

метод, вызванный в viewHolder

 itemView.view_foreground_nav.isSelected = (table.isSelected)

селектор

 <selector 
        xmlns:android="http://schemas.android.com/apk/res/android">
        <item 
       android:drawable="@android:color/darker_gray"
       android:state_pressed="true"/>
        <item 
        android:drawable="@android:color/darker_gray"
        android:state_selected="true"/>
        <item 
         android:drawable="@android:color/darker_gray"
         android:state_focused="true"/>
        <item android:drawable="@android:color/white"/>
      </selector>

RelativeLayout из держателя, где должен быть изменен цвет

 android:id="@+id/view_foreground_nav"
    android:layout_width="match_parent"
    android:layout_height="@dimen/ic_delete"
    android:background="@drawable/recycler_nav_item_background">

переменная вАктивность, установленная в onCreate

private var selectedTable: Table? = null

Метод onClick

 if (selectedTable != null) {
                    var oldSelectedTable = selectedTable
                    oldSelectedTable?.isSelected = false
                    productViewModel.updateTable(oldSelectedTable!!)
                    data.isSelected = true
                    productViewModel.updateTable(data)
                    selectedTable = data
                } else {
                    data.isSelected = true
                    productViewModel.updateTable(data)
                    selectedTable = data
                }
                button_add_note.isEnabled = true
                observerProduct(selectedTable)

Diffutil

override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int):Boolean{

return oldListTable[oldItemPosition].idTable == newListTable[newItemPosition].idTable
}

override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
            return oldListTable[oldItemPosition].title == newListTable[newItemPosition].title&&
                    oldListTable[oldItemPosition].isSelected == newListTable[newItemPosition].isSelected
        }

ProductViewModel - это латинит в MainActivity

 private lateinit var productViewModel: ProductViewModel

В OnCreate я устанавливаю ViewModel

 productViewModel = 
 ViewModelProviders.of(this).get(ProductViewModel::class.java)

GenericAdapter Call

      private fun observerTable() {
    productViewModel.getAllTables().observe(this, Observer<List<Table>> { it ->
        adapterNav.setItems(it as MutableList<Any>)
    })

}

Table Dao

     @Query("Select * from main_table")
fun getAllTables(): LiveData<MutableList<Table>>

ProductRepro

private var tableDao: TableDao
private var allTables: LiveData<MutableList<Table>>
init {
    var database: ProductDatabase? = ListMasterApplication.database
    this.tableDao = database!!.tableDao()
    this.allTables = tableDao.getAllTables()

}
var database: ProductDatabase? = ListMasterApplication.database

fun getAllTable(): LiveData<MutableList<Table>> {
    return allTables
}

ProductVieModel

private var productRepository: ProductRepository = ProductRepository()
private var liveDataTable: LiveData<MutableList<Table>>

init {
    this.liveDataTable = productRepository.getAllTable()

}

fun getAllTables():LiveData<MutableList<Table>>{
   return  liveDataTable
}

Наблюдатель в MainActivity

  private fun observerTable() {
    productViewModel.getAllTables().observe(this, Observer<MutableList<Table>> { it ->
        adapterNav.setItems(it as MutableList<Any>)
    })

}

В наборе GenericAdapter Элементы

fun setItems(items: MutableList<T>) {
    val diffCallback = DiffCallback(listItems ,items)
    val diffResult = DiffUtil.calculateDiff(diffCallback)
    listItems.clear()
    listItems.addAll(items)
    diffResult.dispatchUpdatesTo(this)
}

Я регистрировал свое Diffutil и при каждом нажатии на разные элементыБревно всегда было правильным. Я зарегистрировал выбранную переменную таблицы, это всегда правильно.

Я не знаю, куда идти с этой точки. Это происходит только в начале действия, а затем работает нормально. У вас есть какие-то намеки или что-то, что я мог бы попробовать. Если вам нужно больше понимания кода, дайте мне знать, и я опубликую больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...