私はそれを持っている!私は永遠にインターネットを精査し、それを機能させるためにいくつかのことをまとめました. 基本的には、ユーザーが特定の edittext ボックスにフォーカスしている間、常に実行される並列プロセスを実行します。ユーザーが最初の整数スロットに 0 ~ 5 のみを入力できるようにフィルターを設定しますが、2 番目の整数スロットには 0 ~ 9 を入力できます。これは明らかに 1 から 60 ではなく 0 から 59 を返しますが、それはとにかく数秒間必要です。このコードは、クラス内で onCreate メソッドの前に配置されます。
final InputFilter filter = new InputFilter()
{
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dent)
{
for (int i = start; i < end; i++)
{
if ((source.charAt(start) == "6".charAt(0)) || (source.charAt(start) == "7".charAt(0)) || (source.charAt(start) == "8".charAt(0))
|| (source.charAt(start) == "9".charAt(0)) || (!Character.isDefined(source.charAt(i))) )
{
return "";
}
}
return null;
}
};
private class FilterCheckerTask extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... params)
{
while(true)
{
if (<EditText>.getText().toString().isEmpty())
{
Log.e("empty","empty");
<EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)});
}
else if (<EditText>.getText().toString().charAt(0) >= "6".charAt(0))
{
Log.e("front num bad","greater than 5");
<EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)});
}
else
{
Log.e("unfiltered", "unfiltered");
<EditText>.setFilters(new InputFilter[]{new InputFilter.LengthFilter(2)});
}
if (kicker)
{
return null;
}
}
}
}
次に、onCreate
メソッド内で:
Time_sec.setOnFocusChangeListener(new OnFocusChangeListener()
{
public void onFocusChange(View v, boolean hasFocus)
{
new FilterCheckerTask().execute();
if(!hasFocus)
{kicker = !hasFocus;}
}
});
最初の部分で述べたように、これにより、ユーザーは編集テキスト ボックスに 00 から 59 までの数字しか入力できないようになります。少しずさんに見えるかもしれませんし、おそらくいくつかの if ステートメントで少しクリーンアップできるかもしれませんが、私が知る限り、それは完全に完全に機能し、システムをまったく遅くしているようには見えません. これがあなたの助けになることを願っています。