При использовании профилировщика я обнаружил, что один экземпляр Fragment
все еще там, даже после извлечения его из заднего стека.После рытья много я обнаружил, что это RecyclerView
, который протекает.
Я удалил onClickListener
, и вытекший фрагмент был удален из кучи, но RecyclerView
остался, что не должно происходить как RecyclerView
является частью фрагмента, который уже собран.Сначала я подумал, что это может быть потому, что kotlin компилирует код в байт-код java 1.6, но это не так.Весь данный код принадлежит классу Fragment
.
Java
private void setUpRecycler(View view) {
final SimpleRecyclerViewAdapter<JSONObject> adapter = new SimpleRecyclerViewAdapter<>(R.layout.first_aid_card);
adapter.setItems(getJSONArray());
adapter.setOnBindViewHolderListener((v, i) -> {
try {
((TextView) v.itemView.findViewById(R.id.title)).setText(adapter.getItems().get(i).getString("disease"));
((TextView) v.itemView.findViewById(R.id.calorie)).setText(adapter.getItems().get(i).getString("description"));
}catch (Exception e){
e.printStackTrace();
}
v.itemView.setOnClickListener(v1 -> {
Fragment fragment = new AidDescriptionFrag();
Bundle bundle = new Bundle();
bundle.putInt("index", i);
fragment.setArguments(bundle);
((HomeActivity) activity).replaceFrag(fragment, true);
});
});
final RecyclerView recyclerView = view.findViewById(R.id.first_aids);
recyclerView.setHasFixedSize(true);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setLayoutManager(new LinearLayoutManager(activity, RecyclerView.VERTICAL, false));
recyclerView.setAdapter(adapter);
}
Kotlin
private fun setUpRecycler(view: View) {
val adapter = SimpleRecyclerViewAdapter<JSONObject>(R.layout.first_aid_card)
adapter.items = getJSONArray()
adapter.setOnBindViewHolderListener { v, i ->
v.itemView.findViewById<TextView>(R.id.title).text = adapter.items[i].getString("disease")
v.itemView.findViewById<TextView>(R.id.calorie).text = adapter.items[i].getString("description")
v.itemView.setOnClickListener {
(activity as HomeActivity).replaceFrag(AidDescriptionFrag().also { it.arguments = Bundle().also { it.putInt("index", i) } }, true)
}
}
val recyclerView = view.findViewById<RecyclerView>(R.id.first_aids)
recyclerView.setHasFixedSize(true)
recyclerView.isNestedScrollingEnabled = false
recyclerView.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
recyclerView.adapter = adapter
}