Which context
should I be using when I use a SharedPreference
within a RecyclerView
adapter? This is confusing as when during the default one, context
in val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
appears as an unresolved reference.
class MyRVAdapter(private val myString: ArrayList<String>): RecyclerView.Adapter<MyRVAdapter.MyViewHolder>() {
private val typeA = 1
private val typeB = 2
override fun onCreateViewHolder(parent: ViewGroup, type: Int): MyViewHolder {
return when (type) {
typeA -> MyViewHolder(inflateHelper(R.layout.rv_type_a, parent))
typeB -> MyViewHolder(inflateHelper(R.layout.rv_type_b, parent))
else -> MyViewHolder(inflateHelper(R.layout.rv_type_a, parent))
}
}
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
if (getItemViewType(position) == typeA) {
// Check preference (what's the correct context?)
val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
valueDestinationExpanded = mSharedPreferences.getBoolean("my_preference", true)
}
else if (getItemViewType(position) == typeB) {
}
}
private fun inflateHelper(resId: Int, parent: ViewGroup): View {
return LayoutInflater.from(parent.context).inflate(resId, parent, false)
}
override fun getItemViewType(position: Int): Int {
return if (position == 0) typeA
else typeB
}
}
In fragment
myTV must not be null
class MyFragment : androidx.fragment.app.Fragment() {
private lateinit var mRecyclerView: RecyclerView
private var valueShowTextView: Boolean = false
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.my_rv, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
val v = view
val myTV = my_tv
mRecyclerView = v.mRecyclerViewSansToolbar
mRecyclerView.layoutManager = LinearLayoutManager(activity)
val mAdapter = MyRVAdapter(dataTVtext!!)
val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
valueDestinationExpanded = mSharedPreferences.getBoolean("preference_DestinationExpand", true)
if (valueShowTextView) {
myTV.visibility = View.VISIBLE
} else {
myTV.visibility = View.GONE
}
mRecyclerView.adapter = mAdapter
super.onActivityCreated(savedInstanceState)
}
}