幾天前我開始了android開發。我實作了一個 recylerview,在 recyclerview 配接器的 OnBindViewHolder 方法中,我在 recyclerview 專案上使用了 setOnClickListener。我的主要目標是在單擊 recyclerview 項時啟動一個新活動,但在以下列方式實作我的代碼時遇到了墻:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val clusterItem = datalist[position]
holder.clusterName.setText(clusterItem.name)
holder.clusterStrat.setText(clusterItem.strats)
holder.itemview.setOnClickListener() {
startActivity(Intent(holder.itemview.context,ClusterSearchActivity::class.java))
}
}
我在包含startActivity的行上有 3 個錯誤:
型別不匹配:推斷的型別是 Intent 但預期 Context
沒有為引數“意圖”傳遞值
沒有為引數“選項”傳遞值
在經歷了多種解決方案之后,我終于偶然發現了這個:https : //www.titanwolf.org/Network/q/08ad14d9-cb9a-4b87-923b-f97089db769a/y
使用 context.startActivity(intent) 我重寫了我的代碼,如下所示:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val clusterItem = datalist[position]
holder.clusterName.setText(clusterItem.name)
holder.clusterStrat.setText(clusterItem.strats)
holder.itemview.setOnClickListener() {
holder.itemview.context.startActivity(Intent(holder.itemview.context,ClusterSearchActivity::class.java)) }
}
現在我的代碼終于作業了,但我似乎無法理解為什么我必須使用context.startActivity()。我想了解什么時候可以像那樣使用startActivity()以及什么時候需要使用context.startActivity()。
uj5u.com熱心網友回復:
首先,Context 是應用程式/物件的當前狀態。
有關應用程式環境的全域資訊的介面。
這是一個抽象類,其實作由Android系統提供。
它允許訪問特定于應用程式的資源,如顏色、字串資源、資料庫訪問和類,以及對應用程式級操作的呼叫,如啟動活動、廣播和接收意圖等。
如果您檢查 AppCompatActivity 和 Fragment 內部,則 Context 是 Activity、Service、Application 等的基類。然后你可以在里面找到 startActivity() 方法。
在你的情況下:
在配接器中,如果您需要獲取資料庫訪問權限,字串 res 例如: context.getResources().getString(R.string.yourstring);
需要在運行時在視圖上設定顏色,因此您必須需要應用程式/物件的當前狀態是呼叫背景關系,而背景關系是超類。
您可以通過三種方式在配接器中訪問背景關系。
將 Context 作為引數傳遞給 Adapter 并將其保留為類欄位。
在需要時使用依賴注入來注入 Context。我強烈建議閱讀它。例如:Android Hilt。
最后,
- 從任何 View 物件中獲取它。就像你做的那樣。持有人.itemview.context。
我希望,它可能對你有幫助。
uj5u.com熱心網友回復:
那是因為該方法startActivity()是Activity類的成員而不是RecyclerView,它根本不存在于那里。
順便說一句,從 RecyclerView 單擊啟動 Activity 的更好方法是通過回呼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/399675.html
標籤:安卓 科特林 安卓活动 android-recyclerview
