Android Studio не может импортировать адаптер - PullRequest
0 голосов
/ 15 мая 2019

Я не совсем уверен, является ли это проблемой с моим кодом, или ошибкой в ​​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!
   }
...
}
...