-1

doInBackground()スタッフが終了したら、メインアクティビティのいくつかのボタンを有効にします。誰かがそれを行う方法を教えてもらえますか?

クラスではないので、クラスfindViewByID()からボタンを表示するために使用することはできません!:/AsyncTaskactivity

4

4 に答える 4

5

このように...

  • ボタンを有効にするメソッドを定義します。
  • 次に、そのメソッドPostExecute()AsyncTask呼び出します
于 2012-12-28T10:29:18.280 に答える
0

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

于 2012-12-28T10:49:13.077 に答える
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 の変更がこの 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;
        }

       }
    }
};

ありがとう。

于 2012-12-28T10:49:29.450 に答える
0

コールバックが 1 つあります onPostExecution(...) { } AsynTask クラスのこのメソッドを使用して UI を操作します。

runOnUiThread(new Runnable() {

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

    }
});

また、このメソッドがアクティビティ クラスでのみ使用できることを確認してください

ありがとうございました

于 2012-12-28T10:31:23.173 に答える