Я не совсем уверен, является ли это проблемой с моим кодом, или ошибкой в Android-студии. Я пытаюсь создать экземпляр моего адаптера для повторного просмотра в моей основной деятельности. Он находится в адаптерах пакетов, но я пробовал, находясь в том же каталоге, что и активность, и проблема все еще возникает.
Android Studio предлагает импортировать адаптер (Alt-Enter), но после этого буквально ничего не происходит. импорт вручную тоже не работает, я получаю «Неразрешенная ссылка: TodoAdapter». Как будто файл не существует, несмотря на то, что он явно там.
Я перепробовал все: сделав адаптер общедоступным, сделав недействительными мои кеши, используя другой компьютер, проблема все та же.
Вот мой код:
TodoAdapter:
public class TodoAdapter : ListAdapter<Todo, TodoAdapter.ViewHolder>(TodoDiffCallBack()){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(ListItemTodoBinding.inflate(
LayoutInflater.from(parent.context), parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val todo = getItem(position)
holder.apply {
bind(createOnClickListener(todo.id), todo)
itemView.tag = todo
}
}
private fun createOnClickListener(todoId: Int): View.OnClickListener {
return View.OnClickListener {
Log.v("its working!","workssss")
}
}
class ViewHolder(
private val binding: ListItemTodoBinding
) : RecyclerView.ViewHolder(binding.root){
fun bind(listener: View.OnClickListener, item: Todo) {
binding.apply {
clickListener = listener
todo = item
executePendingBindings()
}
}
}
private class TodoDiffCallBack : DiffUtil.ItemCallback<Todo>() {
override fun areItemsTheSame(oldItem: Todo, newItem: Todo): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Todo, newItem: Todo): Boolean {
return oldItem == newItem
}
}
}
(в этом классе нет ошибок, и привязка работает)
А вот и мой MainActivity
import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import com.test.myapp.adapters.TodoAdapter //unresolved reference here as well!
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProviders
import com.test.myapp.util.Injectors
import com.test.myapp.viewmodels.TodoListViewModel
import kotlinx.android.synthetic.main.activity_main.*
...
class MainActivity : AppCompatActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
val adapter = TodoAdapter() //Unresolved reference!
}
...
}