android kotlin 属性不会随着传递给适配器的方法而改变

时间:2021-05-30 07:50:01

标签: android kotlin android-adapter

我已经在我的片段中定义了一个 val

 private var selectionMode: Boolean = false

和一个改变它的属性

fun enableSelectionMode() {
        selectionMode = true
    }

并且我将两者都传递给了 Adapter 并想在点击每个回收站项目后调用 enableSelectionMode 但什么也没有发生

这是我的片段:

    class PostsFragment : Fragment() {

    private val model: PostsViewModel by activityViewModels()

    private var selectionMode: Boolean = false

    fun enableSelectionMode() {
        selectionMode = true
    }

    private lateinit var recyclerView: RecyclerView

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        val view = inflater.inflate(R.layout.fragment_posts, container, false)

        recyclerView = view.findViewById(R.id.posts_recycler)
        recyclerView.layoutManager = LinearLayoutManager(view.context)

        model.posts.observe(viewLifecycleOwner, { items ->
            recyclerView.adapter = PostsAdapter(items, model, selectionMode,
                ::enableSelectionMode)
        })

        return view
    }

}

和我的适配器

        class PostsAdapter(
    private val posts: List<Post>,
    private val model: PostsViewModel,
    private val selectionMode: Boolean,
    private val enableIt: () -> Unit
) :
    RecyclerView.Adapter<PostsAdapter.ViewHolder>() {

    companion object {
        private const val TYPE_FROM = 0
        private const val TYPE_TO = 1
    }

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        var postContent: TextView = itemView.findViewById(R.id.post_content)
        var selectPostCheckBox: ImageView = itemView.findViewById(R.id.post_select_checkbox)

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {


        val view = LayoutInflater.from(parent.context)
            .inflate(
                if (viewType == TYPE_TO) R.layout.to_post else R.layout.from_post,
                parent,
                false
            )

        return ViewHolder(view)

    }

    @SuppressLint("CheckResult")
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.selectPostCheckBox.visibility = if (selectionMode) View.VISIBLE else View.GONE
        holder.postContent.text = selectionMode.toString()
        holder.selectPostCheckBox.setImageResource(R.drawable.cursor_color)
        holder.itemView.setOnClickListener() {
            enableIt()
            notifyDataSetChanged()
        }
    }

    override fun getItemCount() = posts.size

    override fun getItemViewType(position: Int): Int {

        return posts[position].selfPost
    }
}

0 个答案:

没有答案