gpt4 book ai didi

android - ProgressBar 的可见性

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:05 29 4
gpt4 key购买 nike

当用户在一个 Activity 中单击按钮时,我需要处理一些数据,因此屏幕看起来应用程序停止了 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);

进入 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);
}
}

编辑:

AsyncTask 让您可以在单独的线程中运行代码并使应用程序响应更快,只需将耗时的代码放在 doInBackground 中即可。

关于android - ProgressBar 的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19005014/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com