Функционал механика ч.6

This commit is contained in:
Azat Sagutdinov 2024-06-06 16:48:12 +03:00
parent eea1b4d4f3
commit 5455fef624
13 changed files with 181 additions and 35 deletions

View File

@ -9,6 +9,7 @@ data class DataTech(
val waybill_uuid: String, val waybill_uuid: String,
val waybill_name: String, val waybill_name: String,
val organization_id: String, val organization_id: String,
val organization_name: String,
val mechanic_id: String, val mechanic_id: String,
val mechanic_name: String, val mechanic_name: String,
val result_id: String, val result_id: String,

View File

@ -53,7 +53,7 @@ class TechListAdapter(
fun bind(list: DataTechCheckup) { fun bind(list: DataTechCheckup) {
carName.text = list.vehicle_name carName.text = list.vehicle_name
time.text = list.datetime time.text = list.datetime_
//fio.text = list.fio //fio.text = list.fio
status.text = list.exam_state_name status.text = list.exam_state_name
/* eye.setImageDrawable( /* eye.setImageDrawable(

View File

@ -5,7 +5,10 @@ import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.arellomobile.mvp.presenter.InjectPresenter import com.arellomobile.mvp.presenter.InjectPresenter
import com.arellomobile.mvp.presenter.ProvidePresenter import com.arellomobile.mvp.presenter.ProvidePresenter
import com.google.gson.Gson
import kotlinx.android.synthetic.main.fragment_medical_checkup.*
import kotlinx.android.synthetic.main.fragment_tech_list.* import kotlinx.android.synthetic.main.fragment_tech_list.*
import kotlinx.android.synthetic.main.fragment_tech_list.refresh
import ru.tele2med.mobile.R import ru.tele2med.mobile.R
import ru.tele2med.mobile.presentation.ui.auth.AuthActivity import ru.tele2med.mobile.presentation.ui.auth.AuthActivity
import ru.tele2med.mobile.presentation.ui.base.BasePresenter import ru.tele2med.mobile.presentation.ui.base.BasePresenter
@ -19,7 +22,9 @@ import kotlinx.android.synthetic.main.toolbar_with_help.*
import org.jetbrains.anko.clearTask import org.jetbrains.anko.clearTask
import org.jetbrains.anko.intentFor import org.jetbrains.anko.intentFor
import org.jetbrains.anko.newTask import org.jetbrains.anko.newTask
import ru.tele2med.mobile.domain.entity.DataTech
import ru.tele2med.mobile.domain.entity.DataTechCheckup import ru.tele2med.mobile.domain.entity.DataTechCheckup
import ru.tele2med.mobile.presentation.ui.menu.items.tech.list.techCheckup.tests.TechCheckupTestsFragment
class TechListFragment : BaseMenuFragment(), TechListView { class TechListFragment : BaseMenuFragment(), TechListView {
@ -92,12 +97,29 @@ class TechListFragment : BaseMenuFragment(), TechListView {
} }
recyclerView.addOnScrollListener(scrollListener) recyclerView.addOnScrollListener(scrollListener)
initRecycler()
//setName() //setName()
setClickListeners() setClickListeners()
} }
override fun setRefreshing(flag: Boolean) {
println("setRefreshing = $flag")
refresh.isRefreshing = flag
}
private fun initRecycler() {
println("initRecycler")
refresh.setOnRefreshListener {
println("setOnRefreshListener")
presenter.getCheckups()
}
}
override fun showCheckups(list: List<DataTechCheckup>) { override fun showCheckups(list: List<DataTechCheckup>) {
adapter.submitList(list) adapter.submitList(list)

View File

@ -63,6 +63,14 @@ class TechListPresenter(
) )
.map(uiConverter::toUiTechCheckups) .map(uiConverter::toUiTechCheckups)
.ioToMain() .ioToMain()
.doOnSubscribe {
viewState.showLoading()
}
.doAfterTerminate {
viewState.hideLoading()
viewState.setRefreshing(false)
}
.baseLoadingHandle() .baseLoadingHandle()
.baseHandleErrorSubscribe { .baseHandleErrorSubscribe {
currentCheckups.addAll(it.data) currentCheckups.addAll(it.data)

View File

@ -1,5 +1,7 @@
package ru.tele2med.mobile.presentation.ui.menu.items.tech.list package ru.tele2med.mobile.presentation.ui.menu.items.tech.list
import com.arellomobile.mvp.viewstate.strategy.AddToEndSingleStrategy
import com.arellomobile.mvp.viewstate.strategy.StateStrategyType
import ru.tele2med.mobile.domain.entity.DataCheckup import ru.tele2med.mobile.domain.entity.DataCheckup
import ru.tele2med.mobile.domain.entity.DataTechCheckup import ru.tele2med.mobile.domain.entity.DataTechCheckup
import ru.tele2med.mobile.presentation.ui.base.BaseView import ru.tele2med.mobile.presentation.ui.base.BaseView
@ -7,4 +9,8 @@ import ru.tele2med.mobile.presentation.ui.base.BaseView
interface TechListView : BaseView { interface TechListView : BaseView {
fun showCheckups(list: List<DataTechCheckup>) fun showCheckups(list: List<DataTechCheckup>)
@StateStrategyType(AddToEndSingleStrategy::class)
fun setRefreshing(flag: Boolean)
} }

View File

@ -169,7 +169,7 @@ class TechCheckupInfoFragment : BaseMenuFragment(), TechCheckupInfoView {
tvDriverNumber.text = dataTech.vehicle_name tvDriverNumber.text = dataTech.vehicle_name
tvDrivers.text = dataTech.mechanic_name tvDrivers.text = dataTech.mechanic_name
tvOrgName.text = dataTech.organization_id tvOrgName.text = dataTech.organization_name
tvNumberPL.text = dataTech.waybill_name tvNumberPL.text = dataTech.waybill_name
tvDatePL.text = dataTech.datetime tvDatePL.text = dataTech.datetime

View File

@ -15,7 +15,6 @@ import com.arellomobile.mvp.presenter.ProvidePresenter
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.google.gson.Gson import com.google.gson.Gson
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.fragment_tech_list.*
import ru.tele2med.mobile.R import ru.tele2med.mobile.R
import ru.tele2med.mobile.presentation.ui.base.BasePresenter import ru.tele2med.mobile.presentation.ui.base.BasePresenter
import ru.tele2med.mobile.presentation.ui.drawer.entity.ScreenType import ru.tele2med.mobile.presentation.ui.drawer.entity.ScreenType
@ -30,7 +29,6 @@ import org.jetbrains.anko.clearTask
import org.jetbrains.anko.intentFor import org.jetbrains.anko.intentFor
import org.jetbrains.anko.newTask import org.jetbrains.anko.newTask
import ru.tele2med.mobile.domain.entity.* import ru.tele2med.mobile.domain.entity.*
import ru.tele2med.mobile.presentation.router.NavScreens
import ru.tele2med.mobile.presentation.ui.common.EndlessRecyclerViewScrollListener import ru.tele2med.mobile.presentation.ui.common.EndlessRecyclerViewScrollListener
@ -128,7 +126,7 @@ class TechCheckupTestsFragment : BaseMenuFragment(), TechCheckupTestsView {
override fun setRefreshing(flag: Boolean) { override fun setRefreshing(flag: Boolean) {
println("setRefreshing = $flag") println("setRefreshing = $flag")
// refresh.isRefreshing = flag refresh.isRefreshing = flag
} }
private fun initRecycler() { private fun initRecycler() {

View File

@ -47,6 +47,8 @@ class TechCheckupTestsPresenter(
Log.v("LOG", "it = $it ${it.data.data}") Log.v("LOG", "it = $it ${it.data.data}")
viewState.showCheckups(it.data.data) viewState.showCheckups(it.data.data)
viewState.setRefreshing(false)
}, { }, {
if (it is ApiException) { if (it is ApiException) {

View File

@ -10,6 +10,9 @@ import com.arellomobile.mvp.presenter.ProvidePresenter
import com.google.gson.Gson import com.google.gson.Gson
import kotlinx.android.synthetic.main.fragment_checkup_test.* import kotlinx.android.synthetic.main.fragment_checkup_test.*
import kotlinx.android.synthetic.main.toolbar_with_help.* import kotlinx.android.synthetic.main.toolbar_with_help.*
import org.jetbrains.anko.clearTask
import org.jetbrains.anko.intentFor
import org.jetbrains.anko.newTask
import ru.tele2med.mobile.R import ru.tele2med.mobile.R
import ru.tele2med.mobile.domain.entity.CheckupShowList import ru.tele2med.mobile.domain.entity.CheckupShowList
import ru.tele2med.mobile.domain.entity.DataShow import ru.tele2med.mobile.domain.entity.DataShow
@ -42,6 +45,9 @@ class TestFragment : BaseMenuFragment(), TestView {
addDrawerToggle() addDrawerToggle()
title = getString(R.string.test_toolbar) title = getString(R.string.test_toolbar)
close.visibility = View.VISIBLE close.visibility = View.VISIBLE
close.setOnClickListener {
activity?.onBackPressed()
}
} }
// val args = arguments // val args = arguments
@ -75,7 +81,7 @@ class TestFragment : BaseMenuFragment(), TestView {
fillData(data, datacheckupShowList) fillData(data, datacheckupShowList)
actions(data, uniq_id ?: "", dataTech) actions(data, uniq_id ?: "", dataTech, datacheckupShowList)
} }
} }
@ -85,7 +91,8 @@ class TestFragment : BaseMenuFragment(), TestView {
tvTestName.text = data.name tvTestName.text = data.name
tvComment.text = data.comment tvComment.text = data.comment
tvStatusName.text = checkupShowList?.data?.exam_state_description?: "Вопрос №${data.order+1}" tvStatusName.text =
checkupShowList?.data?.exam_state_description ?: "Вопрос №${data.order.toInt() + 1}"
} }
@ -95,7 +102,17 @@ class TestFragment : BaseMenuFragment(), TestView {
} }
private fun actions(data: DataShow, uniq_id: String, dataTech: DataTech) { private fun actions(
data: DataShow,
uniq_id: String,
dataTech: DataTech,
checkupShowList: CheckupShowList?
) {
skipBtn.setOnClickListener {
presenter.skipTech(uniq_id, dataTech, checkupShowList, data)
}
trueBtn.setOnClickListener { trueBtn.setOnClickListener {
presenter.setValue(uniq_id, data.uniq_id, data, "1", dataTech) presenter.setValue(uniq_id, data.uniq_id, data, "1", dataTech)
} }
@ -116,7 +133,12 @@ class TestFragment : BaseMenuFragment(), TestView {
private var CHECKUP = "CHECKUP" private var CHECKUP = "CHECKUP"
fun getInstance(test: DataShow, uniq_id: String, dataTech: DataTech, checkupShowList: CheckupShowList?): TestFragment { fun getInstance(
test: DataShow,
uniq_id: String,
dataTech: DataTech,
checkupShowList: CheckupShowList?
): TestFragment {
val gson = Gson() val gson = Gson()
val string: String = gson.toJson(test) val string: String = gson.toJson(test)
this.TEST = string this.TEST = string

View File

@ -29,7 +29,13 @@ class TestPresenter(
} }
fun setValue(uniq_id: String, id: String, dataShow: DataShow, value: String, dataTech: DataTech) { fun setValue(
uniq_id: String,
id: String,
dataShow: DataShow,
value: String,
dataTech: DataTech
) {
var checkup = CheckupData(id, dataShow.name ?: "", value, dataShow.type_id ?: "") var checkup = CheckupData(id, dataShow.name ?: "", value, dataShow.type_id ?: "")
var data: List<CheckupData> = listOf(checkup) var data: List<CheckupData> = listOf(checkup)
Log.v("LOG", "it checkup = $uniq_id, data = $data") Log.v("LOG", "it checkup = $uniq_id, data = $data")
@ -48,9 +54,8 @@ class TestPresenter(
.subscribe({ .subscribe({
Log.v("LOG", "it = $it ${it.data}") Log.v("LOG", "it = $it ${it.data}")
if (it.data.count_checked != it.data.count_all.toInt()) { if (it.data.count_checked != it.data.count_all.toInt()) {
showTech(uniq_id, dataTech, it) showTech(uniq_id, dataTech, it, dataShow)
} } else {
else {
viewState.toBack() viewState.toBack()
} }
@ -70,7 +75,12 @@ class TestPresenter(
//router.openPhoneEnterScreen() //router.openPhoneEnterScreen()
} }
fun showTech(uniq_id: String, dataTech: DataTech, checkupShowList: CheckupShowList) { fun showTech(
uniq_id: String,
dataTech: DataTech,
checkupShowList: CheckupShowList?,
dataShow: DataShow
) {
Log.v( Log.v(
"LOG", "LOG",
"showTech uniq_id = $uniq_id," "showTech uniq_id = $uniq_id,"
@ -94,13 +104,18 @@ class TestPresenter(
it.data.data.forEach { it.data.data.forEach {
Log.v("LOG", "showTech forEach ${it}") Log.v("LOG", "showTech forEach ${it}")
if ((it.value != "1") && (it.value != "0")) { if ((it.value != "1") && (it.value != "0") && (it.id != dataShow.id)) {
newShowTech.add(it) newShowTech.add(it)
Log.v("LOG", "showTech openTestCheckupScreen ${newShowTech}") Log.v("LOG", "showTech openTestCheckupScreen ${newShowTech}")
} }
} }
if (newShowTech.isNotEmpty()) { if (newShowTech.isNotEmpty()) {
navRouter.openTestCheckupScreen(newShowTech.first(), uniq_id, dataTech, checkupShowList) navRouter.openTestCheckupScreen(
newShowTech.first(),
uniq_id,
dataTech,
checkupShowList
)
} else { } else {
viewState.toBack() viewState.toBack()
} }
@ -121,4 +136,68 @@ class TestPresenter(
} }
fun skipTech(
uniq_id: String,
dataTech: DataTech,
checkupShowList: CheckupShowList?,
dataShow: DataShow
) {
Log.v(
"LOG",
"skipTech uniq_id = $uniq_id,"
)
disposable += techInteractor
.showTech(uniq_id)
.ioToMain()
.doOnSubscribe {
Log.v("LOG", "it 2 = $it")
// viewState.showLoading()
}
.doAfterTerminate {
viewState.hideLoading()
}
.subscribe({ it ->
Log.v("LOG", "skipTech ${it.data.data}")
val newShowTech = mutableListOf<DataShow>()
for (i in 0 until it.data.data.size) {
if (it.data.data[i] == dataShow) {
if (i+1 != it.data.data.size) {
navRouter.openTestCheckupScreen(
it.data.data[i + 1],
uniq_id,
dataTech,
null
)
}
else {
navRouter.openTestCheckupScreen(
it.data.data[0],
uniq_id,
dataTech,
null
)
}
}
}
}, {
if (it is ApiException) {
if (it.code == RestApiCodes.NotFound.code) {
} else {
this.handleError(it)
}
} else {
this.handleError(it)
}
})
}
} }

View File

@ -213,10 +213,12 @@
<TextView <TextView
android:id="@+id/tvStatusName" android:id="@+id/tvStatusName"
style="@style/BlockValueTitleStyle" style="@style/BlockValueStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Проверка 0 из 0" android:text="Проверка 0 из 0"
android:layout_marginBottom="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvStatusInfoTitle" /> app:layout_constraintTop_toBottomOf="@id/tvStatusInfoTitle" />

View File

@ -76,7 +76,6 @@
app:layout_constraintTop_toTopOf="@id/checkupsBody"> app:layout_constraintTop_toTopOf="@id/checkupsBody">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -90,6 +89,7 @@
android:focusable="true" android:focusable="true"
android:focusableInTouchMode="true" android:focusableInTouchMode="true"
android:text="Путевой лист:" android:text="Путевой лист:"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -171,6 +171,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Номер ПЛ" android:text="Номер ПЛ"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@+id/divider4" /> app:layout_constraintTop_toBottomOf="@+id/divider4" />
<TextView <TextView
@ -178,6 +179,7 @@
style="@style/BlockValueStyle" style="@style/BlockValueStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/tvNumberPLTitle" app:layout_constraintTop_toBottomOf="@id/tvNumberPLTitle"
tools:text="23" /> tools:text="23" />
@ -186,6 +188,7 @@
style="@style/BlockValueDividerStyle" style="@style/BlockValueDividerStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/tvNumberPL" /> app:layout_constraintTop_toBottomOf="@id/tvNumberPL" />
<TextView <TextView
@ -194,6 +197,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Дата ПЛ" android:text="Дата ПЛ"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@+id/divider5" /> app:layout_constraintTop_toBottomOf="@+id/divider5" />
<TextView <TextView
@ -201,6 +205,7 @@
style="@style/BlockValueStyle" style="@style/BlockValueStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/tvDatePLTitle" app:layout_constraintTop_toBottomOf="@id/tvDatePLTitle"
tools:text="18.04.2024" /> tools:text="18.04.2024" />
@ -212,9 +217,6 @@
app:layout_constraintTop_toBottomOf="@id/tvDatePL" /> app:layout_constraintTop_toBottomOf="@id/tvDatePL" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
@ -224,11 +226,11 @@
android:id="@+id/startTest" android:id="@+id/startTest"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/btn_rounded_blue"
android:text="Начать проверки" android:text="Начать проверки"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="12sp" android:textSize="12sp"
android:background="@drawable/btn_rounded_blue"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cvMainInfoContainer" /> app:layout_constraintTop_toBottomOf="@+id/cvMainInfoContainer" />
@ -237,11 +239,11 @@
android:id="@+id/signButton" android:id="@+id/signButton"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/btn_rounded_blue"
android:text="Допустить и подписать" android:text="Допустить и подписать"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="12sp" android:textSize="12sp"
android:background="@drawable/btn_rounded_blue"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/startTest" /> app:layout_constraintTop_toBottomOf="@+id/startTest" />
@ -251,19 +253,16 @@
android:id="@+id/notTest" android:id="@+id/notTest"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/btn_rounded_blue"
android:text="Не допустить и подписать" android:text="Не допустить и подписать"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="12sp" android:textSize="12sp"
android:background="@drawable/btn_rounded_blue"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/signButton" /> app:layout_constraintTop_toBottomOf="@+id/signButton" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
@ -274,7 +273,6 @@
app:layout_constraintTop_toBottomOf="@id/checkupsBody"> app:layout_constraintTop_toBottomOf="@id/checkupsBody">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -292,7 +290,7 @@
<TextView <TextView
android:id="@+id/tvStatusName" android:id="@+id/tvStatusName"
style="@style/BlockValueTitleStyle" style="@style/BlockValueStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="В работе" android:text="В работе"
@ -302,10 +300,12 @@
<TextView <TextView
android:id="@+id/tvStatusTest" android:id="@+id/tvStatusTest"
style="@style/BlockValueTitleStyle" style="@style/BlockValueStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:text="Продено 2 проверки" android:text="Продено 2 проверки"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvStatusName" /> app:layout_constraintTop_toBottomOf="@id/tvStatusName" />
@ -316,7 +316,6 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView> </ScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

View File

@ -7,6 +7,12 @@
android:orientation="vertical"> android:orientation="vertical">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
@ -17,6 +23,7 @@
android:clipToPadding="false" android:clipToPadding="false"
android:paddingTop="4dp" android:paddingTop="4dp"
tools:listitem="@layout/item_checkup" /> tools:listitem="@layout/item_checkup" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout> </RelativeLayout>