我正在努力獲得更好的處理AsyncTask
,並試圖通過asyncTask的onPostExecute()
動態創建控件。Android - 動態創建控件在AsyncTask onPostExecute
我在下面的代碼確實工作,它創建控件,但是有沒有辦法來循環這個,但延遲它,使變量I在asynctask完成後遞增?
我已經閱讀了使用get()方法,但我似乎無法使其工作。
任何人都可以建議如何等待,直到後臺任務完成或其他方式動態創建控件基於變量號碼?
package com.example.dynamicallycreatecontrols;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.Menu;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
Integer i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
while (i < 5) {
new createControl().execute(i);
i++;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
//asynctask
public class createControl extends AsyncTask<Integer, Void, Button> {
Button btn = new Button(MainActivity.this);
LinearLayout ll = (LinearLayout) findViewById (R.id.llMain);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
protected void onPreExecute(Integer i) {
// nothing right now
}
@Override
protected Button doInBackground(Integer... arg0) {
// TODO Auto-generated method stub
// do the calculation
return null;
}
protected void onPostExecute(Button v) {
// build the controls here
btn.setText("Play" + i);
ll.addView(btn, lp);
SystemClock.sleep(1000);
}
}
}
我是新的android開發和Java,所以我不知道如果我只是誤解獲取的概念(),或是否有更好的方式來做到這一切在一起。
感謝您隨時分配援助。
-nick
如果你不這樣做創建按鈕之前的任何繁重的工作,就沒有必要使用的AsyncTask的。 – vovkab
@vovkab我工作的主要應用程序從互聯網上下載文件列表,並使用它來加載樣本音樂供用戶聽。所以在創建按鈕之前需要完成大量的工作。 到目前爲止我能找到的是沒有辦法暫停或延遲一個異類。所以我在看使用處理程序,但這也沒有太大的幫助... –
所以你必須使用AsyncTask,做doInBackground中的所有網絡工作。並在onPostExecute中更新您的按鈕或ListView。很簡單。 – vovkab