doInBackground完成后启用按钮

时间:2012-12-28 10:25:52

标签: java android android-asynctask

一旦来自doInBackground()的内容完成,我想从我的主要活动中启用一些按钮!有人可以告诉我怎么做吗?

我无法使用findViewByID()使AsyncTask课程中的按钮可见,因为它不是activity课程! :/

4 个答案:

答案 0 :(得分:5)

这样做......

  • 定义一个启用按钮的方法。
  • 然后在PostExecute() AsyncTask上,调用该方法

答案 1 :(得分:0)

有一个回调onPostExecution(...){}的AsynTask类使用这个方法来处理UI的东西,对于启用,禁用按钮只是在onPostExcustion中写这个方式(...)

runOnUiThread(new Runnable() {

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
});

还要确保此方法仅在活动类

中可用

谢谢

答案 2 :(得分:0)

你的类扩展了AsyncTask,你可以在调用execute()时将你的上下文推入其中。

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();
    }
}

并从Activity中调用execute:

new RegisterUser(this).execute(new String[] {"param"});

或者您可以在Activity类中定义AsyncTask类 - 您可以在其中找到所有内容。 更多信息Lars Vogel - Android Threads, Handlers and AsyncTask

答案 3 :(得分:0)

按照这种方式:

[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更改将通过此处理程序反映在屏幕上。

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;
        }

       }
    }
};

感谢。