当用户在一项活动中单击按钮时,我需要处理一些数据,因此屏幕看起来应用程序停止了 2-3 秒。这不是很多,但我想向用户提供一切正常的信息,IMO 最好的方法是进度条,仅在处理数据时才可见。
我找到了ProgressBar的代码,它看起来像这样:
<ProgressBar
android:id="@+id/loadingdata_progress"
style="?android:attr/progressBarStyle"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/fin2_note"
android:layout_centerHorizontal="true"
android:indeterminate="true"
android:visibility="invisible" />
并将其插入到我的布局的中间。
为了尝试进度条是否有效,我输入了这段代码
loadingimage= (ProgressBar) findViewById(R.id.loadingdata_progress);
loadingimage.setVisibility(View.VISIBLE);
into onCreate
方法和一切看起来都很好。
然后我重新创建了代码,仅在处理数据时才显示此进度条。
单击后用户调用此方法
public void fin2_clickOnFinalization(View v)
{
loadingimage= (ProgressBar) findViewById(R.id.loadingdata_progress);
loadingimage.setVisibility(View.VISIBLE);
// code where data is processing
loadingimage.setVisibility(View.INVISIBLE);
}
屏幕上什么也没有出现。我不知道错误在哪里。如果我通过 id 找到进度条,这对我来说很奇怪,我可以在 onCreate 方法中控制它,但在 onclick 方法中它超出了我的控制范围。
您的 UI 线程无法显示进度条,因为您的数据处理正忙于该线程。尝试使用这种代码:
public void fin2_clickOnFinalization(View v) {
new YourAsyncTask().execute();
}
private class YourAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... args) {
// code where data is processing
return null;
}
@Override
protected void onPostExecute(Void result) {
loadingimage.setVisibility(View.INVISIBLE);
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
loadingimage.setVisibility(View.VISIBLE);
}
}
EDIT:
AsyncTask 让您在单独的线程中运行代码并使应用程序响应更快,只需将耗时的代码放入其中即可doInBackground
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)