parent
4ecaa4e2bf
commit
20b1fd9077
@ -0,0 +1,43 @@ |
|||||||
|
package io.legado.app.ui.book.remote |
||||||
|
|
||||||
|
import android.content.Context |
||||||
|
import android.view.ViewGroup |
||||||
|
import io.legado.app.base.adapter.ItemViewHolder |
||||||
|
import io.legado.app.base.adapter.RecyclerAdapter |
||||||
|
import io.legado.app.data.entities.Book |
||||||
|
import io.legado.app.databinding.ItemRemoteBookBinding |
||||||
|
|
||||||
|
|
||||||
|
class RemoteBookAdapter (context: Context, val callBack: CallBack) : |
||||||
|
RecyclerAdapter<String, ItemRemoteBookBinding>(context){ |
||||||
|
|
||||||
|
override fun getViewBinding(parent: ViewGroup): ItemRemoteBookBinding { |
||||||
|
return ItemRemoteBookBinding.inflate(inflater, parent, false) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCurrentListChanged() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 绑定RecycleView 中每一个项的视图和数据 |
||||||
|
*/ |
||||||
|
override fun convert( |
||||||
|
holder: ItemViewHolder, |
||||||
|
binding: ItemRemoteBookBinding, |
||||||
|
item: String, |
||||||
|
payloads: MutableList<Any> |
||||||
|
) { |
||||||
|
binding.run { |
||||||
|
tvName.text = item |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override fun registerListener(holder: ItemViewHolder, binding: ItemRemoteBookBinding) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
interface CallBack { |
||||||
|
fun showRemoteBookInfo(book: Book) |
||||||
|
} |
||||||
|
} |
@ -1,7 +1,68 @@ |
|||||||
package io.legado.app.ui.book.remote |
package io.legado.app.ui.book.remote |
||||||
|
|
||||||
import android.app.Application |
import android.app.Application |
||||||
|
import android.util.Log |
||||||
|
import android.widget.Toast |
||||||
import io.legado.app.base.BaseViewModel |
import io.legado.app.base.BaseViewModel |
||||||
|
import io.legado.app.utils.FileDoc |
||||||
|
import kotlinx.coroutines.Dispatchers |
||||||
|
import kotlinx.coroutines.channels.awaitClose |
||||||
|
import kotlinx.coroutines.flow.callbackFlow |
||||||
|
import kotlinx.coroutines.flow.flowOn |
||||||
|
import kotlinx.coroutines.flow.map |
||||||
|
import kotlinx.coroutines.withContext |
||||||
|
import java.util.* |
||||||
|
import kotlin.reflect.typeOf |
||||||
|
|
||||||
class RemoteBookViewModel(application: Application): BaseViewModel(application){ |
class RemoteBookViewModel(application: Application): BaseViewModel(application){ |
||||||
|
|
||||||
|
private var dataCallback : DataCallback? = null |
||||||
|
var dataFlowStart: (() -> Unit)? = null |
||||||
|
val dataFlow = callbackFlow<List<String>> { |
||||||
|
|
||||||
|
val list = Collections.synchronizedList(ArrayList<String>()) |
||||||
|
|
||||||
|
dataCallback = object : DataCallback { |
||||||
|
|
||||||
|
override fun setItems(remoteFiles: List<String>) { |
||||||
|
list.clear() |
||||||
|
list.addAll(remoteFiles) |
||||||
|
Log.e("TAG", ": 1", ) |
||||||
|
trySend(list) |
||||||
|
} |
||||||
|
|
||||||
|
override fun addItems(remoteFiles: List<String>) { |
||||||
|
list.addAll(remoteFiles) |
||||||
|
trySend(list) |
||||||
|
} |
||||||
|
|
||||||
|
override fun clear() { |
||||||
|
list.clear() |
||||||
|
trySend(emptyList()) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// withContext(Dispatchers.Main) { |
||||||
|
// dataFlowStart?.invoke() |
||||||
|
// } |
||||||
|
|
||||||
|
awaitClose { |
||||||
|
dataCallback = null |
||||||
|
} |
||||||
|
}.flowOn(Dispatchers.Main) |
||||||
|
|
||||||
|
fun loadRemoteBookList() { |
||||||
|
Log.e("TAG", dataCallback.toString(), ) |
||||||
|
dataCallback?.setItems(listOf("1", "2", "3")) |
||||||
|
} |
||||||
|
|
||||||
|
interface DataCallback { |
||||||
|
|
||||||
|
fun setItems(remoteFiles: List<String>) |
||||||
|
|
||||||
|
fun addItems(remoteFiles: List<String>) |
||||||
|
|
||||||
|
fun clear() |
||||||
|
|
||||||
|
} |
||||||
} |
} |
@ -0,0 +1,91 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout 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="wrap_content"> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.image.CoverImageView |
||||||
|
android:id="@+id/iv_cover" |
||||||
|
android:layout_width="80dp" |
||||||
|
android:layout_height="110dp" |
||||||
|
android:layout_margin="8dp" |
||||||
|
android:contentDescription="@string/img_cover" |
||||||
|
android:scaleType="centerCrop" |
||||||
|
android:src="@drawable/image_cover_default" |
||||||
|
android:transitionName="img_cover" |
||||||
|
app:layout_constraintBottom_toBottomOf="parent" |
||||||
|
app:layout_constraintLeft_toLeftOf="parent" |
||||||
|
app:layout_constraintTop_toTopOf="parent" |
||||||
|
tools:ignore="UnusedAttribute" /> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.text.BadgeView |
||||||
|
android:id="@+id/bv_originCount" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_margin="8dp" |
||||||
|
app:layout_constraintTop_toTopOf="parent" |
||||||
|
app:layout_constraintRight_toRightOf="parent" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_name" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_margin="8dp" |
||||||
|
android:singleLine="true" |
||||||
|
android:text="@string/app_name" |
||||||
|
android:textColor="@color/primaryText" |
||||||
|
android:textSize="16sp" |
||||||
|
app:layout_constraintEnd_toStartOf="@id/bv_originCount" |
||||||
|
app:layout_constraintStart_toEndOf="@+id/iv_cover" |
||||||
|
app:layout_constraintTop_toTopOf="parent" /> |
||||||
|
|
||||||
|
<!-- <LinearLayout--> |
||||||
|
<!-- android:layout_width="0dp"--> |
||||||
|
<!-- android:layout_height="0dp"--> |
||||||
|
<!-- android:orientation="vertical"--> |
||||||
|
<!-- android:layout_marginTop="3dp"--> |
||||||
|
<!-- app:layout_constraintBottom_toBottomOf="@id/iv_cover"--> |
||||||
|
<!-- app:layout_constraintLeft_toLeftOf="@+id/tv_name"--> |
||||||
|
<!-- app:layout_constraintRight_toRightOf="@id/tv_name"--> |
||||||
|
<!-- app:layout_constraintTop_toBottomOf="@+id/tv_name">--> |
||||||
|
|
||||||
|
<!-- <TextView--> |
||||||
|
<!-- android:id="@+id/tv_author"--> |
||||||
|
<!-- android:layout_width="match_parent"--> |
||||||
|
<!-- android:layout_height="wrap_content"--> |
||||||
|
<!-- android:ellipsize="end"--> |
||||||
|
<!-- android:lines="1"--> |
||||||
|
<!-- android:text="@string/author"--> |
||||||
|
<!-- android:textColor="@color/primaryText"--> |
||||||
|
<!-- android:textSize="12sp" />--> |
||||||
|
|
||||||
|
<!-- <io.legado.app.ui.widget.LabelsBar--> |
||||||
|
<!-- android:id="@+id/ll_kind"--> |
||||||
|
<!-- android:layout_width="match_parent"--> |
||||||
|
<!-- android:layout_height="wrap_content"--> |
||||||
|
<!-- android:orientation="horizontal" />--> |
||||||
|
|
||||||
|
<!-- <TextView--> |
||||||
|
<!-- android:id="@+id/tv_lasted"--> |
||||||
|
<!-- android:layout_width="match_parent"--> |
||||||
|
<!-- android:layout_height="wrap_content"--> |
||||||
|
<!-- android:ellipsize="end"--> |
||||||
|
<!-- android:lines="1"--> |
||||||
|
<!-- android:text="@string/last_read"--> |
||||||
|
<!-- android:textColor="@color/primaryText"--> |
||||||
|
<!-- android:textSize="12sp" />--> |
||||||
|
|
||||||
|
<!-- <io.legado.app.ui.widget.text.MultilineTextView--> |
||||||
|
<!-- android:id="@+id/tv_introduce"--> |
||||||
|
<!-- android:layout_width="match_parent"--> |
||||||
|
<!-- android:layout_height="match_parent"--> |
||||||
|
<!-- android:ellipsize="end"--> |
||||||
|
<!-- android:text="@string/book_intro"--> |
||||||
|
<!-- android:textColor="@color/primaryText"--> |
||||||
|
<!-- android:textSize="12sp" />--> |
||||||
|
|
||||||
|
<!-- </LinearLayout>--> |
||||||
|
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout> |
Loading…
Reference in new issue