加载活动时显示进度条

Ada*_*dam 20 android progressdialog android-asynctask

我有一个基于列表选择ListActivity启动另一个Activity.第二个Activity需要从互联网上加载相当数量的数据,因此在用户点击项目和Activity显示时间之间存在明显的延迟.

这是一个问题,因为我目前无法向用户表明他们的点击正在被处理(即使只是更改所选列表项的颜色就足够了,但我找不到一个好方法).理想情况下,我可以ProgressDialog在第二个Activity加载时显示不确定的信息.

我已经为此尝试了一些不同的方法,但似乎没有任何工作.


我尝试过以下方法:

  • 在第一个AsyncTask中检索可序列化数据(不是全部而是部分)Activity,并将其作为额外的数据传递给第二个.这并没有真正起作用,因为ProgressDialog我创建的onPreExecute()并没有立即显示(doInBackground()由于某些原因,它似乎延迟了处理.)

这是代码:

AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
    Dialog progress;

    @Override
    protected void onPreExecute() {
        progress = ProgressDialog.show(SearchActivity.this, 
                "Loading data", "Please wait...");
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        DatasetReader reader = new DatasetReader();
        reader.setFundID(params[0]);
        reader.addDatsets(FundProfile.datasets);
        reader.populate();
        return reader.toString();
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        progress.dismiss();
    }
};
read.execute(selectedItem.getUniqueID());
try {
    action = new Intent(SearchActivity.this, FundProfile.class);
    action.putExtra("data", read.get());
} catch(Exception ex) {
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
  • 在第二个Activity的onCreate()方法中(这根本不起作用):

    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setProgressBarVisibility(true);

以下是onCreate()第二种方法的方法:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setTitleColor(Color.WHITE);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setProgressBarVisibility(true);

    try {
        setContentView(R.layout.fund_profile);
        // init some data
        setProgressBarVisibility(false);
    } catch(Exception ex) {
        FundProfile.this.finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

Dam*_*amp 16

如果您有长时间操作,则无论如何都不应该在onCreate中执行它们,因为这会冻结UI(无论是否显示活动).在onCreate调用完成之后,onCreate设置的UI将不会出现,UI将无响应.

您似乎可以启动第二个活动并显示进度条(或requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);),然后启动一个ASyncTask,它将负责在检索数据后更新您的UI.