Я хочу сделать такой интерфейс:
Как вы можете видеть, там есть вертикальный вид переработчика. этот вид рециркулятора находится внутри вида прокрутки. поэтому я хочу, чтобы экран можно было прокручивать так же, как и данные об элементе в представлении переработчика. вот XML, который я использую:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:id="@+id/scrollView_user_control"
tools:context=".Fragments.UserControl.UserControlFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/constraintLayout_profile">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/imageView_profile_image_user_control"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/user"
app:civ_border_width="0.5dp"
app:civ_border_color="#FF000000"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginStart="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="32dp"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:text="User Fullname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_user_fullname_user_control"
android:layout_marginTop="24dp"
app:layout_constraintTop_toBottomOf="@+id/imageView_profile_image_user_control"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" android:textSize="18sp"/>
<TextView
android:text="user@email.com"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_user_email_user_control"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp"
app:layout_constraintTop_toBottomOf="@+id/textView_user_fullname_user_control"
android:layout_marginTop="8dp"/>
<TextView
android:text="AKAN DIHADIRI"
android:layout_width="0dp"
android:layout_height="35dp"
android:id="@+id/textView_will_come_user_control"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="32dp"
app:layout_constraintTop_toBottomOf="@+id/textView_user_email_user_control"
android:gravity="center|left"
android:paddingStart="16dp" android:background="#D2D1D6"/>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView_will_come_user_control"
tools:listitem="@layout/item_general_event"
android:id="@+id/recyclerView_attended_event_user_control"/>
<ImageView
android:src="@drawable/ic_settings"
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/imageView_gear_setting_user_control"
app:layout_constraintTop_toTopOf="@+id/imageView_profile_image_user_control"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="24dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
Если я получу 20 данных с сервера и установлю для них эти 20 элементов в представлении переработчика, это замедлит работу моего приложения, то есть фрагмент появится примерно через 2 секунды после транзакции фрагмента.
Если я ограничу данные только теми данными, которые были извлечены с сервера и должны быть показаны в представлении переработчика. это сделает мое приложение быстрее.
так что это очищает, чем больше элементов в представлении рециркулятора в представлении прокрутки, тем медленнее отображается фрагмент.
вот мой код:
class UserControlFragment : Fragment() {
lateinit var progressBar : ProgressBar
lateinit var gearSettingImageView: ImageView
lateinit var emailTextView: TextView
lateinit var userFullNameTextView :TextView
lateinit var profilePictureImageView : ImageView
lateinit var fragmentView : View
lateinit var recyclerView : RecyclerView
lateinit var sharedPrefManager : SharedPreferenceManager
lateinit var eventAdapter : GeneralEventRecyclerViewAdapter
private var attendedEvents = ArrayList<Event>()
private var userData : User? = null
lateinit var mContext : Context
lateinit var mActivity : FragmentActivity
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context
activity?.let { mActivity = it }
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
fragmentView = inflater.inflate(R.layout.fragment_user_control, container, false)
sharedPrefManager = SharedPreferenceManager.getInstance(mContext)
setUpViewsDeclaration()
getUserData()
updateUI()
initRecyclerView()
return fragmentView
}
private fun setUpViewsDeclaration() {
progressBar = mActivity.progressBar_main_activity
gearSettingImageView = fragmentView.findViewById(R.id.imageView_gear_setting_user_control)
emailTextView = fragmentView.findViewById(R.id.textView_user_email_user_control)
profilePictureImageView = fragmentView.findViewById(R.id.imageView_profile_image_user_control)
userFullNameTextView = fragmentView.findViewById(R.id.textView_user_fullname_user_control)
recyclerView = fragmentView.findViewById(R.id.recyclerView_attended_event_user_control)
}
private fun getUserData() {
userData = sharedPrefManager.loadUserData()
if (userData == null) {
performLogOut()
return
}
getAttendedEvents()
}
private fun updateUI() {
userData?.let {
userFullNameTextView.text = it.fullname
emailTextView.text = it.email
Picasso.get()
.load(it.profilePicturePath)
.into(profilePictureImageView)
}
}
private fun initRecyclerView() {
eventAdapter = GeneralEventRecyclerViewAdapter(mContext)
val layoutManager = LinearLayoutManager(mContext, RecyclerView.VERTICAL,false)
recyclerView.adapter = eventAdapter
recyclerView.layoutManager = layoutManager
recyclerView.isNestedScrollingEnabled = false
eventAdapter.setOnItemClickListener(object: OnEventKMListener {
override fun eventKMClicked(position: Int) {
val selectedEvent = attendedEvents[position]
val eventDetailDestination = UserControlFragmentDirections.actionGlobalDestinationEventDetail(selectedEvent)
Navigation.findNavController(fragmentView).navigate(eventDetailDestination)
}
})
}
private fun getAttendedEvents() {
showLoadingState(true)
FirestoreKMClient.getRecommendedEvents(userData!!.domicile) { errorMessage, events ->
errorMessage?.let {
activity?.toast(it)
} ?: run {
val eventList = events ?: ArrayList()
attendedEvents = eventList
eventAdapter.submitList(eventList)
showLoadingState(false)
}
}
}
private fun showLoadingState(enabled: Boolean) {
if (enabled) {
progressBar.visibility = View.VISIBLE
recyclerView.visibility = View.GONE
} else {
progressBar.visibility = View.GONE
recyclerView.visibility = View.VISIBLE
}
}
}
Я пытался переместить фоновую обработку из onCreateView в onResume, но это не дает никакого эффекта.
так как это решить? Ява в порядке