我正在使用通过蓝牙模块获取某些参数的Android应用。
我为此设置了一个服务:我有一个调用AsyncTask的计时器来读取这些值,并在任何值发生变化时更新我的Listview UI。一切似乎都很顺利。
有些值是布尔值,有些是整数。我有整数的Edittext框。如果用户触摸Edittext,我希望用户能够键入新值,当他按下操作按钮时,调用某种方法将此新值写入我的BT设备。
现在,当我触摸Edittext时,会弹出数字键盘。没问题,但是在一秒钟后它失去了焦点,因为Asynctask不断更新所有的Edittexts。
我的问题是,我应该停止我的定时asynctask,以便能够键入新值并将其写入我的设备然后再次启动我的计时器吗?
或者,最有效的方法是能够输入Edittext然后使用此值作为参数调用我的方法?
我很感激任何帮助。这是我的第一个应用程序,所以我在学习的时候......
public class RefreshListParams extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params)
{
//Create request, get my data, and update my objects (serC)
}
@Override
protected void onPostExecute(String res)
{
super.onPostExecute(res);
do{
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}while (serC.data == null);
TextView textv;
CheckedTextView check;
ListViewItem edit;
try {
paramAdapter ad = (paramAdapter) pholder.listv.getAdapter();
int x = 0;
byte[] b = serR.data;
for (int i =0; i<ad.objects.length; i++)
{
if (ad.getItemViewType(i) == paramAdapter.TYPE_CHECK)
{
textv = (TextView) pholder.view.findViewById(R.id.parameters);
if (coilParam[i])
pholder.listv.setItemChecked(i, true);
else
pholder.listv.setItemChecked(i, false);
}
else
if (ad.getItemViewType(i) == paramAdapter.TYPE_VALUE)
{
edit = (ListViewItem) ad.getItem(i);
}
}
ad.notifyDataSetChanged();
}catch (ClassCastException cce)
{
cce.printStackTrace();
}
}
}