0

私は持っていbuttonます。onclickイベントでは、 を実行してから、progressDialogがロードされている間progressDialogに を実行しAsyncTaskます。

私のコード:

メソッド OnCreate

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

principal_layout = (RelativeLayout) findViewById(R.id.principal_layout);
text_search = (TextView) findViewById(R.id.textView1);
search_button = (Button) findViewById(R.id.button1);
input_song = (EditText) findViewById(R.id.editText1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);

search_button.setOnClickListener(new OnClickListener() {

@Override
    public void onClick(View v) {

        runOnUiThread(new Runnable() {
                public void run() {
                    pd = ProgressDialog.show(MainActivity.this, "Working..", "Loading, please wait..", true, false);
                }
            });

        handler.sendEmptyMessage(1);

    }});
}

メソッドハンドラー (var Handler)

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {

        if(msg.what == 1){
            try {
                songs = new AsyncTasks().new GetSong(MainActivity.this).execute("mySong","1").get();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            catch (ExecutionException e) {
                e.printStackTrace();
            }
            sendEmptyMessage(0);
        }
        else if(msg.what == 0){
            Toast.makeText(MainActivity.this, "Finished process", Toast.LENGTH_SHORT).show();

            if(pd != null && pd.isShowing()){
                pd.dismiss();
            }
        }
    }

};

コードはエラーを生成しませんが、次は次のとおりです。

ボタンをクリックすると、プログラムは次の行を実行します。

曲 = new AsyncTasks().new GetSong(MainActivity.this).execute("mySong","1").get();

、そして実行が終了すると、最近progressDialogが表示されます。ボタンをクリックする正確な瞬間が表示されることを願っています(遅滞なく)。

4

1 に答える 1

0

これを簡単かつ明確に行うことができます:

Handler h = new Handler();
button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        pd = ProgressDialog.show(MainActivity.this, "Working..", "Loading, please wait..", true, false);
        new Thread(new Runnable() {
            public void run() {
                //Loading code
                h.post(new Runnable() {
                    public void run() {
                        pd.dismiss();
                    }
                });
            }
        }).start();
    }
});
于 2013-05-24T04:25:13.693 に答える