0

我对android编程相当陌生,想澄清一个场景。好的,我有两个名为 A 和 B 的活动。当活动 A 启动时,它请求在后台下载一些数据,并且无论如何在 3 秒后活动 B 启动。活动 A 的作用类似于启动屏幕。因此,当 B 活动启动时,我想保持并等待数据完全加载,以便我可以在活动 B 中初始化下载的数据。此时活动 B 甚至在数据下载之前启动。如果是这种情况,在加载 B 并下载数据之后,我将如何在活动 B 中动态加载数据?另外,有没有办法在下载数据之前将 onCreate 保留在活动 B 中?

先感谢您。

4

3 回答 3

1

您可以实现 Loader(首选)或 Async Task 以在 Activity A 中加载数据。数据加载完成后,在 onLoadFinished 或 onPostExecute 中打开 Activity B 并使用意图传入下载的数据。我建议在 Activity A 中显示加载图标,以便用户知道您的应用正在后台执行一些工作。

于 2013-05-29T10:52:33.983 回答
1

我认为您正在使用 AsyncTask 进行后台数据下载。如果是,那么您只需从 asyncTask 的 onPostExecute() 方法启动活动 B。

你可以创建单独的线程或内部类

    public class ThreadCutFiles extends AsyncTask<Object, Object, Boolean>{

    private ProgressDialog progressDialog;
    private Context context;
    private Handler handler;

    public ThreadCutFiles( Context context, Handler handler ) {
        this.context = context;
        this.handler = handler;
    }

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(context);
        progressDialog.setTitle("File Manager");
        progressDialog.setMessage("Copying Files...");      
        progressDialog.show();
    }

    @Override
    protected Boolean doInBackground(Object... params) {
        //ur downloading code
        return true;

    }   

    @Override
    protected void onPostExecute(Boolean result) {
        progressDialog.dismiss();

        }
    }
}
于 2013-05-29T10:41:36.200 回答
1

假设您正在使用 AsyncTask,您可以在活动 B 中创建一个回调,您可以在 AsyncTask 的 onPostExecute 中调用该回调,将下载的数据传递给活动 B。这样,您只需在活动 B onCreate 中放置一个加载对话框,并注意在回调中加载数据。

A:

public class ActivityA extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_a);
    //start download task
    ActivityB b = new ActivityB();
    startActivity(new Intent(getApplicationContext(), b.getClass()));
    new Task(b.new DownloadCallback()).execute();
   }

 }

乙:

public class ActivityB extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_b);
}

@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
    //show a progress dialog
    return super.onCreateView(name, context, attrs);
}

private void loadData(/*Your data*/){
    //Load your data
    System.out.println("data loaded");
}

public class DownloadCallback {

    public void onFinish(/*Your data*/) {
        loadData(/*Your data*/);
    }

   }

}

任务:

public class Task extends AsyncTask<Void, Void, Object>{//Change the Object to whatever your data is

private DownloadCallback callback;

public Task(DownloadCallback callback) {
    this.callback = callback;
}

@Override
protected Object doInBackground(Void... params) {
    //Download data here
    //Change the Object return value to whatever your data is
    return true;
}   

@Override
protected void onPostExecute(Object result) {
    //Change the Object to whatever your data is and pass to the finish method
    callback.onFinish(/*Your data*/);
  }
 }
于 2013-05-29T10:44:09.283 回答