doInBackground()
スタッフが終了したら、メインアクティビティのいくつかのボタンを有効にします。誰かがそれを行う方法を教えてもらえますか?
クラスではないので、クラスfindViewByID()
からボタンを表示するために使用することはできません!:/AsyncTask
activity
doInBackground()
スタッフが終了したら、メインアクティビティのいくつかのボタンを有効にします。誰かがそれを行う方法を教えてもらえますか?
クラスではないので、クラスfindViewByID()
からボタンを表示するために使用することはできません!:/AsyncTask
activity
このように...
PostExecute()
をAsyncTask
呼び出しますexecute() を呼び出すときに、AsyncTask を拡張するクラスにコンテキストをプッシュできます。
private class RegisterUser extends AsyncTask<String,String,String> {
private ListActivity activity;
public RegisterUser(ListActivity activity) {
this.activity = activity;
}
protected void onPostExecute(JSONObject json) {
activity.editText = (EditText)activity.findViewById(R.id.editText1);
//or
activity.enableButton();
}
}
次のようにアクティビティから実行を呼び出します。
new RegisterUser(this).execute(new String[] {"param"});
または、Activity クラス内で AsyncTask クラスを定義することもできます。ここで、すべてにアクセスできます。詳細Lars Vogel - Android スレッド、ハンドラー、AsyncTask
この方法に従ってください:
[1] AsyncTask を作成します。
public class performBackgroundTask extends AsyncTask<Void, Void, Void> {
ProgressDialog Dialog = new ProgressDialog(HotUsers.this);
protected void onPreExecute() {
Dialog.setMessage("Loading Hot Users...");
Dialog.show();
}
protected void onPostExecute(Void unused) {
if(Dialog.isShowing())
Dialog.dismiss();
set_details_on_screen();
}
@Override
protected Void doInBackground(Void... params) {
get_details_from_server(); // get data like userid,username,userdesc etc...
return null;
}
}
[2]これにより、UI の変更を続行する関数が呼び出されます。
public void set_details_on_screen()
{
if(userid > 0 )
handler_default.sendEmptyMessage(0);
else
handler_default.sendEmptyMessage(1);
}
[3]最後に、UI の変更がこの Handler で画面に反映されます。
private Handler handler_default = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0: {
textuserid = (TextView) findViewById(R.id.userid);
textusername = (TextView) findViewById(R.id.username);
textuserdesc = (TextView) findViewById(R.id.userdesc);
textuserid.setText(userid);
textusername.setText(username);
textuserdesc.setText(userdesc);
break;
}
case 1: {
Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();
break;
}
}
}
};
ありがとう。
コールバックが 1 つあります onPostExecution(...) { } AsynTask クラスのこのメソッドを使用して UI を操作します。
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
また、このメソッドがアクティビティ クラスでのみ使用できることを確認してください
ありがとうございました