Hello
У меня есть одна кнопка ImageButton с одним изображением. Я добавил событие onclick, и обычно оно работает нормально. Когда нажимается кнопка Image, моя функция добавления ввода работает.
Теперь, когда пользователь постоянно нажимает на мою кнопку с изображением, функции «Добавить запись» выполняются много раз с одними и теми же данными. Я хочу предотвратить это. Таким образом, Imagebutton не должен стоять в очереди для обработки следующего события щелчка, пока моя функция не будет выполнена полностью.
Я попытался myImageButton.setEnable(false)
, как только будет выполнено событие OnClick. И делает
myImageButton.setEnable(true)
после моей функции ввода данных.
Я также пытался поместить этот код в myImageButton.isEnabled()
, но он не работал.
Как игнорировать такие события щелчков в очереди? Есть ли другой способ (setEnable()
) игнорировать / обрабатывать обработку кликов?
Я установил в println операторы, что каждое событие нажатия синхронизировано ... означает, что весь код выполняется по порядку.
EDIT
private OnClickListener m_AddClickHandler = new OnClickListener()
{
public void onClick(View v)
{
if(m_bDoAdd)
{
m_bDoAdd = false;
new AddTask().execute();
}
else
logData("Add::OnClick::not clicked");
}
};
private class AddTask extends AsyncTask<Void, Void, Integer>
{
@Override
protected Integer doInBackground(Void... params)
{
logData("doinbg, start"+m_bDoAdd);
int iStatus =Add(m_data);
logData("doinbg, start end, status="+iStatus+"flag="+m_bDoAdd);
return iStatus;
}
@Override
protected void onPostExecute(Integer result)
{
logData("onpostExec, start"+m_bDoAdd);
int iStatus = result;
if (iStatus == 0)
{
Toast.makeText(getApplicationContext(), R.string.strAdded, Toast.LENGTH_SHORT).show();
}
else if (iStatus == 1)
{
Toast.makeText(getApplicationContext(), R.string.strAlreadyExists, Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), R.string.strAddFailed, Toast.LENGTH_SHORT).show();
}
m_bDoAdd = true;
logData("onpostExec, end"+m_bDoAdd);
}
}
void Add()
{
// Add info to db (takes few msecs)
}
Я все еще не получаю сообщение "Add :: OnClick :: not clicked" в журнале.
Есть еще какие-нибудь подсказки?