我无法在Kotlin警告中创建抽象类的实例? [英] I am getting cannot create instance of abstract class in kotlin warning?

查看:607
本文介绍了我无法在Kotlin警告中创建抽象类的实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Kotlin的新手.我有两个类,一个适配器和一个片段.当我想在片段中调用适配器类时,收到以下警告:cannot create an instance of the abstract class in Kotlin.

I am a new to Kotlin. I have two classes, one adapter and one fragment. When I want to call the adapter class in fragment I am getting the following warning: cannot create an instance of the abstract class in Kotlin.

在我收到警告的片段下面

Below my fragment where I am getting the warning

class FavouriteExercisesFragment : BaseMvpFragment(), FavoriteExerciseView {

    var adapter: FavoriteExerciseAdapter = FavoriteExerciseAdapter()
   // cannot create instance of abstract class in kotlin

在抽象适配器类之下

class FavouriteExercisesFragment : BaseMvpFragment(), FavoriteExerciseView {

    var adapter: FavoriteExerciseAdapter = FavoriteExerciseAdapter()
    val presenter: FavoriteExercisePresenter = FavoriteExercisePresenter(this)

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        rootView = inflater.inflate(R.layout.fragment_favorite_ex, container, false)
        return rootView
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initToolbar()
        initList()
        presenter.getFavoriteExercise()
    }

    private fun initList() {
        rvExercise.layoutManager = LinearLayoutManager(context)
        rvExercise.adapter = adapter
        val helper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT) {
            override fun onMove(recyclerView: RecyclerView?, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
                adapter.onItemMove(viewHolder.adapterPosition, target.adapterPosition)
                return true
            }

            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                val position = viewHolder.adapterPosition
                val item = adapter.data[position]
                adapter.onItemDismiss(viewHolder.adapterPosition)
                presenter.deleteFromFavorite(item, position)
                showEmptyData(adapter.data.isEmpty())

            }
        })
        rvExercise.addItemDecoration(object : RecyclerView.ItemDecoration() {
            override fun getItemOffsets(outRect: Rect, view: View?, parent: RecyclerView, state: RecyclerView.State?) {
                super.getItemOffsets(outRect, view, parent, state)
                val position = parent.getChildAdapterPosition(view)
                if (position == 0) {
                    outRect.top = 58.dp
                } else {
                    outRect.top = 0
                }

            }
        })
        helper.attachToRecyclerView(rvExercise)
        adapter.helper = helper
        adapter.actions = object : FavoriteExerciseAdapter.AdapterAction {
            override fun playExercise(exercise: Exercise) {
                val file = exercise.files.firstOrNull { it.mainFile }
                val uri = file?.getFile() ?: ""

                context?.startActivityFromCenter(VideoActivity.newInstance(context, uri), rootView, VideoActivity.REQUEST_CODE)
            }
        }
    }

    private fun initToolbar() {
        toolbar.setOnNavigateIconClickListener { router.exit() }
        toolbar.setOnToolIconClickListener { openNavDrawer() }
    }

    override fun setFavoriteExercises(exercises: ArrayList<Exercise>) {
        showEmptyData(exercises.isEmpty())
        adapter.addData(exercises)
    }

    override fun showDeleteMessage(item: Exercise, position: Int) {
        val snack = Snackbar.make(rootView, R.string.message_remove_from_favorite, Snackbar.LENGTH_LONG)
        snack.setAction(R.string.action_undo) {
            presenter.addToFavorite(item)
            adapter.addItemOnPosition(item, position)
            showEmptyData(adapter.data.isEmpty())
        }
        snack.show()
    }

    private fun showEmptyData(show: Boolean) {
        tvEmpty.visibility = if (show) View.VISIBLE else View.GONE
        emptyIcon.visibility = if (show) View.VISIBLE else View.GONE
    }
}

推荐答案

您无法创建抽象类的实例.您应该从类声明中删除摘要,或者应该创建扩展该抽象类的新类并创建该类的实例.

You can't create instance of an abstract class. You should remove abstract from the class declaration, or you should create new class extending the abstract class and make instances of that class.

这篇关于我无法在Kotlin警告中创建抽象类的实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆