我正在尝试使用8个edittext创建PIN视图。我使用了递归函数为每个edittext添加addTextChangedListener。
我的期望是当用户在一个edittext中输入单个数字时,焦点应该移到下一个edittext,以此类推。但问题是当用户快速输入数字时,edittexts没有捕获到所有数字。
例如:我快速输入89898989,它只填充了888888。
请参考以下代码:
我的期望是当用户在一个edittext中输入单个数字时,焦点应该移到下一个edittext,以此类推。但问题是当用户快速输入数字时,edittexts没有捕获到所有数字。
例如:我快速输入89898989,它只填充了888888。
请参考以下代码:
class FirstFragment : Fragment() {
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
var count = 0
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentFirstBinding.inflate(inflater, container, false)
val views = arrayListOf(
_binding!!.textView,
_binding!!.textView2,
_binding!!.textView3,
_binding!!.textView4,
_binding!!.textView5,
_binding!!.textView6,
_binding!!.textView7,
_binding!!.textView8
)
views.first().requestFocus()
someRecursiveFunction(views)
return binding.root
}
private fun someRecursiveFunction(view: ArrayList<EditText>) {
view[count].addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {
if (view[count].text.toString().length == 1) {
if (count == view.size - 1) {
Toast.makeText(context, "Reached last digit", Toast.LENGTH_SHORT).show()
return
} else {
view[count].removeCallbacks {}
count++
view[count].requestFocus()
someRecursiveFunction(view)
}
}
}
override fun beforeTextChanged(
s: CharSequence, start: Int,
count: Int, after: Int
) {}
override fun onTextChanged(
s: CharSequence, start: Int,
before: Int, count: Int
) {}
})
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
布局代码:
<?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="match_parent"
tools:context=".FirstFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/textView"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:maxLength="1"
android:gravity="center"
android:inputType="number"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
<EditText
android:id="@+id/textView2"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:maxLength="1"
android:gravity="center"
android:inputType="number"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
<EditText
android:id="@+id/textView3"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:inputType="number"
android:maxLength="1"
android:gravity="center"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
<EditText
android:id="@+id/textView4"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:inputType="number"
android:maxLength="1"
android:gravity="center"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
<EditText
android:id="@+id/textView5"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:inputType="number"
android:maxLength="1"
android:gravity="center"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
<EditText
android:id="@+id/textView6"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:inputType="number"
android:maxLength="1"
android:gravity="center"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
<EditText
android:id="@+id/textView7"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:inputType="number"
android:maxLength="1"
android:gravity="center"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
<EditText
android:id="@+id/textView8"
android:background="@android:color/white"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:focusable="true"
android:maxLines="1"
android:inputType="number"
android:maxLength="1"
android:gravity="center"
android:textColor="@color/black"
android:layout_width="40dp"
android:layout_height="40dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>