Как правильно сделать вертикальный вид рециркулятора внутри прокрутки, который не будет замедлять появление фрагмента? - PullRequest
0 голосов
/ 23 мая 2019

Я хочу сделать такой интерфейс:

enter image description here

Как вы можете видеть, там есть вертикальный вид переработчика. этот вид рециркулятора находится внутри вида прокрутки. поэтому я хочу, чтобы экран можно было прокручивать так же, как и данные об элементе в представлении переработчика. вот 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, но это не дает никакого эффекта.

так как это решить? Ява в порядке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...