pull/36/head
parent
91e3ae3c5d
commit
5c3d50657a
@ -0,0 +1,3 @@ |
|||||||
|
package io.legado.app.data.entities |
||||||
|
|
||||||
|
data class EditEntity(var key: String, var value: String?, var hint: Int) |
@ -0,0 +1,85 @@ |
|||||||
|
package io.legado.app.ui.rss.source.edit |
||||||
|
|
||||||
|
import android.text.Editable |
||||||
|
import android.text.TextWatcher |
||||||
|
import android.view.LayoutInflater |
||||||
|
import android.view.View |
||||||
|
import android.view.ViewGroup |
||||||
|
import androidx.recyclerview.widget.RecyclerView |
||||||
|
import io.legado.app.R |
||||||
|
import io.legado.app.data.entities.EditEntity |
||||||
|
import kotlinx.android.synthetic.main.item_source_edit.view.* |
||||||
|
|
||||||
|
class RssSourceEditAdapter : RecyclerView.Adapter<RssSourceEditAdapter.MyViewHolder>() { |
||||||
|
|
||||||
|
var editEntities: ArrayList<EditEntity> = ArrayList() |
||||||
|
set(value) { |
||||||
|
field = value |
||||||
|
notifyDataSetChanged() |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { |
||||||
|
return MyViewHolder( |
||||||
|
LayoutInflater.from( |
||||||
|
parent.context |
||||||
|
).inflate(R.layout.item_source_edit, parent, false) |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: MyViewHolder, position: Int) { |
||||||
|
holder.bind(editEntities[position]) |
||||||
|
} |
||||||
|
|
||||||
|
override fun getItemCount(): Int { |
||||||
|
return editEntities.size |
||||||
|
} |
||||||
|
|
||||||
|
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) { |
||||||
|
fun bind(editEntity: EditEntity) = with(itemView) { |
||||||
|
if (editText.getTag(R.id.tag1) == null) { |
||||||
|
val listener = object : View.OnAttachStateChangeListener { |
||||||
|
override fun onViewAttachedToWindow(v: View) { |
||||||
|
editText.isCursorVisible = false |
||||||
|
editText.isCursorVisible = true |
||||||
|
editText.isFocusable = true |
||||||
|
editText.isFocusableInTouchMode = true |
||||||
|
} |
||||||
|
|
||||||
|
override fun onViewDetachedFromWindow(v: View) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
editText.addOnAttachStateChangeListener(listener) |
||||||
|
editText.setTag(R.id.tag1, listener) |
||||||
|
} |
||||||
|
editText.getTag(R.id.tag2)?.let { |
||||||
|
if (it is TextWatcher) { |
||||||
|
editText.removeTextChangedListener(it) |
||||||
|
} |
||||||
|
} |
||||||
|
editText.setText(editEntity.value) |
||||||
|
textInputLayout.hint = context.getString(editEntity.hint) |
||||||
|
val textWatcher = object : TextWatcher { |
||||||
|
override fun beforeTextChanged( |
||||||
|
s: CharSequence, |
||||||
|
start: Int, |
||||||
|
count: Int, |
||||||
|
after: Int |
||||||
|
) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
override fun afterTextChanged(s: Editable?) { |
||||||
|
editEntity.value = (s?.toString()) |
||||||
|
} |
||||||
|
} |
||||||
|
editText.addTextChangedListener(textWatcher) |
||||||
|
editText.setTag(R.id.tag2, textWatcher) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue