我有一个Class:GalleryLoop,其中包含所有细节
我有一个单独的类:LoadingScreenActivity,它有一个扩展AsyncTask的内部类
我正在尝试拨打.execute
中的LoadingScreenActivity
,以便我可以加载GalleryLoop
有没有办法在不合并两个Java CLass文件的情况下执行?
代码如下:
private class LoadViewTask extends AsyncTask<Void, Integer, Void>
{
//A TextView object and a ProgressBar object
private TextView tv_progress;
private ProgressBar pb_progressBar;
//Before running code in the separate thread
@Override
protected void onPreExecute()
{
//Initialize the ViewSwitcher object
viewSwitcher = new ViewSwitcher(LoadingScreenActivity.this);
/* Initialize the loading screen with data from the 'loadingscreen.xml' layout xml file.
* Add the initialized View to the viewSwitcher.*/
viewSwitcher.addView(ViewSwitcher.inflate(LoadingScreenActivity.this, R.layout.loadingscreen, null));
//Initialize the TextView and ProgressBar instances - IMPORTANT: call findViewById() from viewSwitcher.
tv_progress = (TextView) viewSwitcher.findViewById(R.id.tv_progress);
pb_progressBar = (ProgressBar) viewSwitcher.findViewById(R.id.pb_progressbar);
//Sets the maximum value of the progress bar to 100
pb_progressBar.setMax(100);
//Set ViewSwitcher instance as the current View.
setContentView(viewSwitcher);
}
//The code to be executed in a background thread.
@Override
protected Void doInBackground(Void... params)
{
/* This is just a code that delays the thread execution 4 times,
* during 850 milliseconds and updates the current progress. This
* is where the code that is going to be executed on a background
* thread must be placed.
*/
try
{
//Get the current thread's token
synchronized (this)
{
//Initialize an integer (that will act as a counter) to zero
int counter = 0;
//While the counter is smaller than four
while(counter <= 4)
{
//Wait 850 milliseconds
this.wait(850);
//Increment the counter
counter++;
//Set the current progress.
//This value is going to be passed to the onProgressUpdate() method.
publishProgress(counter*25);
}
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return null;
}
//Update the TextView and the progress at progress bar
@Override
protected void onProgressUpdate(Integer... values)
{
//Update the progress at the UI if progress value is smaller than 100
if(values[0] <= 100)
{
tv_progress.setText("Progress: " + Integer.toString(values[0]) + "%");
pb_progressBar.setProgress(values[0]);
}
}
//After executing the code in the thread
@Override
protected void onPostExecute(Void result)
{
/* Initialize the application's main interface from the 'main.xml' layout xml file.
* Add the initialized View to the viewSwitcher.*/
viewSwitcher.addView(ViewSwitcher.inflate(LoadingScreenActivity.this, R.layout.main, null));
//Switch the Views
viewSwitcher.showNext();
//ImageView = viewSwitcher.findViewById(R.id.imageView1);
setContentView(R.layout.main);
}
}
另一个类文件:
public class GalleryLoop extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//details of Galleryloop
}
我是Android的新手,我不确定以下哪个是更好的选择:
1.在AsyncTask启动之前启动GalleryLoop
2.在AsyncTask中启动GalleryLoop(在do_in_background中)
提前致谢。
答案 0 :(得分:1)
我对this post的回答可以帮助你...使用Asynctask类的构造函数并将调用活动传递给Asynctask ......
然后,一旦Asynctask完成,你就可以在调用活动中调用一个回调函数。
这应该允许您为GalleryLoop活动使用一个类,并在后台使用Asynctask运行加载屏幕活动,完成后调用回调函数。