プログレスダイヤログのタイミングについて

このQ&Aのポイント
  • Androidアプリ開発にてプログレスダイヤログの表示を行っております。意図したタイミングでプログレスダイヤログが表示されないので、どなたかご教授いただけませんでしょうか?
  • 理想の流れは、ボタンを押すとプログレスダイヤログが表示され、スリープ処理後にプログレスダイヤログが閉じることです。
  • しかし、現在の流れではボタンを押した後にスリープ処理が行われ、その後にダイヤログが表示されてしまいます。
回答を見る
  • ベストアンサー

プログレスダイヤログのタイミングについて

プログレスダイヤログのタイミングについて 現在、Androidアプリ開発にてプログレスダイヤログの表示を行っております。 意図したタイミングでプログレスダイヤログが表示されないので、どなたかご教授いただけませんでしょうか? ■理想の流れ ボタンを押す ↓ プログレスダイヤログの表示 ↓ スリープ処理 ↓ プログレスダイヤログを閉じる ■現在の流れ ボタンを押す ↓ スリープ処理 ↓ ダイヤログ表示 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.xxx); //プログレスダイヤログを生成 final ProgressDialog pd; pd = new ProgressDialog(this); pd.setMessage("情報を読込んでいます。しばらくお待ち下さい。"); pd.setTitle("Loading……"); pd.setIndeterminate(false); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); //検索ボタンの呼び出し Button btn = (Button)findViewById(R.id.Button21); //検索ボタン押下の処理 btn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { //プログレスダイヤログを生成 pd.show(); try { Thread.sleep(10000);//10秒スリープする } catch (InterruptedException e1) { e1.printStackTrace(); } . . . .

  • Java
  • 回答数1
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

別スレッドで処理させればいいのかな? http://magpad.jugem.jp/?eid=109 --- Androidは実は全然わからないけれど、 たぶん 『「(onCrick()のような)イベントハンドラ」内での 「なんらかのGUIに対するなんらかの変更」は、 そのイベントハンドラを抜けたあとでないと反映されない』 という「方針」が 採用されてるんじゃない? (Java Swingなどでは採用されてたはず) ようするに提示されているこのコードでいえば、 pd.show(); は、「ただちには実行されない」(あとまわしにされる)ってこと。

nuun1107
質問者

お礼

ご教授ありがとうございます。 kacchannさんの仰るとおり、別スレッドを作ってそこで処理させると理想の流れにする事ができました。 ありがとうございました。

関連するQ&A

  • Android、プログレスダイアログについて

    よろしくお願いします。 Mainクラスでボタンを押すと処理が行われ、 その処理が終わるまでプログレスダイアログを出したい と思っています。 現在のソースコードは以下の通りです。 //中略 public boolean onOptionsItemSelected(MenuItem item) { //中略 public void onClick(/*略*/) { //処理 //この処理が終わるまでプログレスダイアログをくるく るしたい //onCreate処理を入れてみたらエラーが出てしまいま した public void complete() { //処理が成功した場合 } else { //失敗したとき } } 同じクラス内でも別クラスでも構いませんので、 御存知の方がいらっしゃいましたらよろしくお願いしま す。

  • 二つのコードを繋げたい

    eclipseでandroidプログラミングをしている超初心者です。 いろいろ試しましたがうまくいかないので力を貸してください。 コード1 final String TAG = "DialogTest"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((Button)findViewById(R.id.button1)) .setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { new AlertDialog.Builder(MainActivity.this) .setTitle("Hello, AlertDialog!") .setPositiveButton( "Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton( "No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); } }); } } コード2 EditText mEditText_number = null; LinearLayout mLinearLayout_no_button = null; Button mButton_dial = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLinearLayout_no_button = new LinearLayout(this); mEditText_number = new EditText(this); mEditText_number.setText("117"); mLinearLayout_no_button.addView(mEditText_number); mButton_dial = new Button(this); mButton_dial.setText("電話をかける"); mLinearLayout_no_button.addView(mButton_dial); mButton_dial.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { performDial(); } }); setContentView(mLinearLayout_no_button); } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_CALL) { performDial(); return true; } return false; } public void performDial(){ if(mEditText_number!=null){ try { startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + mEditText_number.getText()))); } catch (Exception e) { e.printStackTrace(); } } } } AlertDialogを表示するコード1で”YES”を押したらコード2を使って電話がかかるようにしたいです。 回答よろしくお願いします。

  • Android JAVAへでの質問です

    (←※この部分!) の意味がわからないのでどなたか教えていただけないでしょうか? private EditText edit1; ですが、なぜ private がついているのでしょうか?なくても動きましたが何か意味があるのでしょうか? そしてどうして、この子はここにいるのでしょうか? Button btn1 と一緒に仲良くいてもいいんじゃないでしょうか? ================ import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.view.*; import android.view.View.OnClickListener; import android.widget.*; public class Test2Activity extends Activity { private EditText edit1;(←※この部分!) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit1 = (EditText)this.findViewById(R.id.EditText1); Button btn1 = (Button)this.findViewById(R.id.button1); btn1.setOnClickListener(new MyClickA()); } class MyClickA implements OnClickListener { public void onClick(View view){ Editable e = edit1.getText(); int n = Integer.parseInt(e.toString()); Toast toast = Toast.makeText(getApplicationContext(), "数値=" + n, Toast.LENGTH_SHORT); toast.show(); } } }

    • ベストアンサー
    • Java
  • 無名クラスからのstartActivity

    androidの勉強をしております。 無名クラス内からIntentのコンストラクタに渡す引数がthisでは不十分なのはどうしてですか? 以下がソース例です。 略 public class HelloAndroid extends Activity{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); 略 button1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(HelloAndroid.this, HA2.class); startActivity(intent); } }); } }

    • ベストアンサー
    • Java
  • Androidで画面遷移ができません.

    初心者ながら,Android向けにアプリを開発しています. ページXXXXXでボタンを表示させ,ページYYYYYで画像が表示されるようにしたいのですが,ページXXXXXで表示されたボタンを押すとエラーが出て強制終了となってしまいます. 画面遷移されるページ(YYYYY)には,適当な位置にタッチさせるとタッチした位置に移動する画像についてプログラミングしてあります.ページYYYYYは個別で実行すると正常に起動します. どこに原因があるのか教えてください.よろしくお願いします. ページXXXXXのソースは以下のとおりです. 【ソース】 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.content.Intent; public class XXXXX extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent intent = new Intent(XXXXX.this, YYYYY.class); startActivity(intent); } }); } }

    • ベストアンサー
    • Java
  • Androidアプリのクリック処理

    とても初歩的な問題で申し訳ないのですが、 3日悩んで解決できなかったので、質問させてください。 現在、Androidアプリの修正を行っています。 現状: 画面いっぱいにWebViewを表示させ、あるサイトを表示させる 改修案: 画面下にボタンを1つ追加し、このボタンをタップすると別サイトを表示させたい 表示するサイトは、サーバー上の特定テキストファイルから引っこ抜いてくる ※現状のアプリは、他の人から引き継がれたもので、当時開発には一切関わっておりません。 まず、XMLファイルでボタンを追加し、IDを「button1」としました。 次に、ActivityクラスにLoaderCallbacksクラスを継承しました。 同時に、AsyncTaskLoaderクラスを作成し、非同期でテキストファイルの内容を取得し、 任意のサイトを表示させる、というところまでは完成しています。 最後に、ボタンタップでクリック処理を行う、というところなのですが、 ここでつまづいてしまいました。 public class Frame extends Activity implements View.OnClickListener, LoaderCallbacks<xxxxxx> { private Button nextButton; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // レイアウトで指定したWebViewのIDを指定する。 nextButton = (Button)findViewById(R.id.button1); setContentView(R.layout.frame); // クリック処理をセット nextButton.setOnClickListener(this);   ←ここでNullPointerException発生!        } public void onClick(View v) { if (v == nextButton) { // ここに、ボタンタップ後に行う処理を記述 } } } 追加した部分だけを抜き出したのが上記の処理なのですが、 onCreate内の【nextButton.setOnClickListener(this)】の部分で、 NullPointerExceptionが発生してしまいます。 この部分だけコメントアウトすると処理はとりあえず通るのですが、 クリック処理を受け取る設定ができていないので、もちろんボタンをタップしても 何もイベントは発生しません。 初歩的な質問で大変申し訳ないのですが、本当に解決法が分からず困っています。 どうぞ知恵をお貸しください、よろしくお願いします。

  • androidアプリ開発について

    androidアプリ開発初心者です。 やりたいことは、 スタートボタンを押して、自分のお気に入りのページに飛び、(例えばオークションなど)サイトを表示させ、何分間ごとに更新できるループ処理?などができればいいなと考えています。 スタートボタンを押してサイトを表示するまでは何とか作れたのですが、それ以降をどのように作ったらいいのか分かりません。 初心者的な質問で申し訳ないのですが、どのように書いたらよいのか教えてください。 コードはこのようになっています。 <<main.xml>> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="192dp" android:layout_height="wrap_content" android:text="スタート" /> </LinearLayout> <<MainActivity.java>> import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { Button btn =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ Uri uri =Uri.parse("http://"); Intent intent=new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 長文で申し訳ありません。どうぞ宜しくお願い致します。

  • nullpointexceptionについて

    プログラミング初心者です。 エラーが全くわかりません。 ボタンを押すと、リストビューに移動するというものなんですが、ボタンを押すとnullpointexceptionが出ます。 最後の、et.setText(str);でエラーになっているようなんですが、 お分かりになる方いらっしゃいますか・・・? よろしくお願いいたします。 public class MainActivity extends Activity { EditText text_naiyou =null; Button save=null; Button buck=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); save=(Button)findViewById(R.id.save); buck=(Button)findViewById(R.id.buck); text_naiyou=(EditText)findViewById(R.id.text_naiyou); save.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EditText et = (EditText)findViewById(R.id.text_naiyou); String str = et.getText().toString(); Intent intent = new Intent(); intent.setClass(getApplicationContext(), ListActivity.class); String pkg = getPackageName(); intent.putExtra(pkg + ".input",str); startActivity(intent); public class ListActivity extends Activity { EditText text_naiyou =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); Intent intent = getIntent(); String pkg = getPackageName(); String str = intent.getStringExtra(pkg + ".input"); EditText et = (EditText)findViewById(R.id.text_naiyou); et.setText(str);

  • Bootstrapの利用について

    新規で立ち上げたまっさらのプロジェクトです。 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); (1)Button btn = new Button(this); (2)Button btn = (Button)findViewById(R.id.btnBig); } } (1)を使うと強制終了しないのに (2)を使うと強制終了してしまいます。 XMLファイルには <com.beardedhen.androidbootstrap.BootstrapButton android:id="@+id/btnBig" android:layout_width="fill_parent" android:layout_height="200dp" android:layout_margin="10dp" android:text="Primary" bootstrapbutton:bb_icon_right="fa-cloud" bootstrapbutton:bb_roundedCorners="true" bootstrapbutton:bb_type="primary" bootstrapbutton:bb_text_gravity="right" /> というシンプルなソースのみです。 (1)で起動しているのに (2)で強制終了する理由は何故なのでしょうか? XMLを <Button android:id="@+id/btnBig" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="test" /> と書き換えると正常に起動するのは確認済みです。 AndroidどころかJAVAもまだ使いはじめて数日なのですが 言語特有の何かがあるのでしょうか?

    • ベストアンサー
    • Java
  • addActionListenerについて

    ボタンbtn1をクリックした時の処理をさせたいと思っています。 そこで、addActionListenerを使って新しくクラスを作っています。 そこでe.getSouce()==btn1とすればbtn1が押された時の処理が通ると思ったのですが、 System.out.println()で確認してもどうも処理が通っていません。 コンストラクタ内でbtn1.addActionListenerとすればうまくいきましたが、 クラスごとに分けていきたいのであまりそういうことはしたくありません。 新しくクラスを作る方法でも出来ると思ったのですが、このソースでは何が原因で動かないのでしょうか? import java.awt.*; import java.awt.event.*; public class click2 extends Frame{ public static void main(String args[]){ click2 myfra=new click2(); myfra.show(); } Button btn1=new Button("start"); click2(){ setSize(300,200); setBackground(Color.white); setLayout(null); btn1.setBounds(50,70,40,20); add(btn1); } class Listener implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource() == btn1){ System.out.println("btn1"); } } } }