一旦doInBackground()
的东西完成,我想从我的主要活动中启用几个按钮!有人可以让我知道如何做到这一点?doInBackground完成后启用按钮
我不能使用findViewByID()
使他从AsyncTask
类中可见,因为它不是activity
类! :/
一旦doInBackground()
的东西完成,我想从我的主要活动中启用几个按钮!有人可以让我知道如何做到这一点?doInBackground完成后启用按钮
我不能使用findViewByID()
使他从AsyncTask
类中可见,因为它不是activity
类! :/
存在的AsynTask类使用一个回调onPostExecution(...){}这个方法来UI的东西,用于启用,禁用按钮只写这种方式onPostExcustion(...)
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
也确保这种方法只在活动课提供
谢谢
当你调用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 Threads, Handlers and 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],将调用函数继续进行用户界面的变化。
public void set_details_on_screen()
{
if(userid > 0)
handler_default.sendEmptyMessage(0);
else
handler_default.sendEmptyMessage(1);
}
[3]最后你的用户界面的变化会在屏幕上与该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;
}
}
}
};
谢谢。
你为什么不把你的活动的参考传递给你的AsyncTask? – asgoth
[这样做](http://stackoverflow.com/a/7618705/593709) –
@Adil Soomro我很抱歉,这对我来说太复杂了!你能否描述它以适应我的情况? – defiant