[英]Kotlin recyclerview on Fragment
我試圖顯示一個列表的 recyclerview,該列表由一個片段上的凌空 api 請求提供,但不能每次返回此錯誤“lateinit property tareas view has not been initialized fragment”,
我嘗試使用 findviewbyid 來聲明它導致“未解析的引用”的 recyclerview
這是片段的代碼:
private lateinit var prefs: SharedPreferences
//private lateinit var tareaAdapter: TareaAdapter
private lateinit var viewOfLayout: View
private var listener: OnFragmentInteractionListener? = null
private lateinit var recyclerView: RecyclerView
private lateinit var tareas: ArrayList<Tarea>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewOfLayout = inflater!!.inflate(R.layout.fragment_tareas_generales, container, false)
prefs = PreferenceManager.getDefaultSharedPreferences(activity!!.applicationContext)
val recyclerView = viewOfLayout.findViewById<RecyclerView>(R.id.rvGeneralTareas)
recyclerView.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(
this@TareasGeneralesFragment.context!!,
LinearLayout.VERTICAL,
false
)
getTareaGenerales()
val adapter = TareaAdapter(tareas)
recyclerView.adapter = adapter
return inflater.inflate(R.layout.fragment_tareas_generales, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
private fun getTareaGenerales() {
val recyclerView = viewOfLayout.findViewById<RecyclerView>(R.id.rvGeneralTareas)
if (!NetworkUtils.isConnected(this@TareasGeneralesFragment.context!!)) {
Toast.makeText(this@TareasGeneralesFragment.context!!, R.string.error_internet2,
Toast.LENGTH_LONG).show()
} else {
val queue = Volley.newRequestQueue(this@TareasGeneralesFragment.context!!)
val URL = "${Utils.URL_SERVER}guardias/tareas"
val stringRequest = object : StringRequest(Method.GET, URL, Response.Listener<String> {
response ->
try {
var strResp = response.toString()
val jsonObj: JSONObject = JSONObject(strResp)
val jsonArray = jsonObj.getJSONArray("tareas")
Log.d("paso","Connected to tareas generales $strResp")
for (i in 0 until jsonArray.length()) {
var jsonInner: JSONObject = jsonArray.getJSONObject(i)
val id_tarea = jsonInner.get("id_tarea").toString().toInt()
val descripcion = jsonInner.get("descripcion").toString()
Log.d("add","$id_tarea,$descripcion")
tareas.add(Tarea(id_tarea,descripcion))
}
val adapter = TareaAdapter(tareas)
recyclerView.adapter = adapter
} catch (e: Exception) {
e.printStackTrace()
Toast.makeText(this@TareasGeneralesFragment.context!!, resources.getString(R.string.error_general), Toast.LENGTH_LONG).show()
}
}, Response.ErrorListener { error ->
try {
error.printStackTrace()
Toast.makeText(this@TareasGeneralesFragment.context!!, JSONObject(String(error.networkResponse.data)).getString("message"), Toast.LENGTH_LONG).show()
} catch (e: Exception) {
Toast.makeText(this@TareasGeneralesFragment.context!!, resources.getString(R.string.error_general), Toast.LENGTH_LONG).show()
}
}) {
override fun getHeaders(): MutableMap<String, String> {
val headers = HashMap<String, String>()
headers.put("token", prefs.getString("api_key", "")!!)
return headers
}
}
stringRequest.retryPolicy = DefaultRetryPolicy(180000, 1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)
queue.add(stringRequest)
}
}
companion object {
fun newInstance(): TareasGeneralesFragment {
return TareasGeneralesFragment()
}
}
我想這與您將視圖膨脹兩次的事實有關。 首先,您在onCreateView
中將其充氣到viewOfLayout
,然后返回inflater.inflate(R.layout.fragment_tareas_generales, container, false)
。 我猜您在onCreateView
中的所有更改都是 null 並且在您返回新膨脹的視圖后立即失效。
R.layout.fragment_tareas_generales
)onViewCreated
中做所有的視圖布局和適配器的東西
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.