android - 在 RecyclerView Adapter 中使用带有 Activity 作为参数的方法

标签 android layout android-recyclerview kotlin adapter

我的 RecyclerView 适配器有问题。 我想在我的 RecyclerView 适配器类中调用此方法:

class UIManager {
   companion object {
      fun updateElem(fromActivity: Activity?)
      {
        if (fromActivity == null) { return }

        val number: TextView = fromActivity.findViewById(R.id.box)

        var chest = fromActivity.resources.getString(R.string.chests)
        if (DataManager.boxes?.size!! < 2)
            chest = fromActivity.resources.getString(R.string.chest)

        number.text = DataManager.boxes?.size?.let { "" + DataManager.boxes?.size + " " + chest } ?: "0 " + chest 
    }
   }
  }

通常我可以在我的 Adapter 中创建一个方法并将 Activity 作为参数传递然后调用 updateElem()。

但是我尝试了很多东西,但对我没有用,因为即使我这样做,我也在我的适配器的覆盖方法中调用它,请参阅:

class RecyclerAdapter(val list: ArrayList<String>) : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>()
{

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view: View = LayoutInflater.from(parent.context).inflate((R.layout.box_elem), parent, false)
        return ViewHolder(view)
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getItemViewType(position: Int): Int {
        return position
    }

    override fun getItemCount(): Int {
        return list.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        holder.image.setImageResource(R.drawable.original_box)
        holder.itemView.setOnClickListener(View.OnClickListener {
            removeElemAt(position)
        })
    }

    fun removeElemAt(position: Int) {
        list.removeAt(position)
        notifyItemRemoved(position)
        notifyItemRangeChanged(position, list.size)

        // I WANT TO USE THE METHOD HERE
        // !!
        UIManager.updateElem()   <--------------
        //
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
        var image: ImageView = itemView.findViewById(R.id.box_elem)
    }
  }
}

最佳答案

如果您需要一个 Activity 引用,您总是可以在创建它时将其传递给适配器的构造函数:

class RecyclerAdapter(val activity: Activity, val list: ArrayList<String>)
//...

然后您可以使用 UIManager.updateElem(activity) 调用的 Activity 属性。

关于android - 在 RecyclerView Adapter 中使用带有 Activity 作为参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50630010/

相关文章:

ios - UIScrollView 在 vi​​ewWillLayoutSubviews 或 viewDidLayoutSubviews 中设置 contentInset

android - Recyclerview 不调用任何适配器方法 :onBindViewHolder, onCreateViewHolder

android - 有了RecyclerView,Picasso还有必要吗?

Android ActionBar - 将自定义 View 推送到屏幕底部

java - XML 元素未添加到 ArrayList 中

android - Jetpack Compose 找到 parent 的宽度/长度

c++ - QSpacerItem改变大小会吸引bug

android - 如何使用express编写recyclerview拖放的测试用例

android - 显示 ListView 上的最后几项

java - "new"Java(Android) 中的关键字 :D