• ベストアンサー

Android-画面更新

メインの画面となるActivityから別クラスで作成したサービスを起動して、そのサービスの中でスレッドを動作させています。そのスレッドから画面のTextViewの文字の変更を行うには、sendBroadcastをActivityで受け取って、activityの中で文字変更を行わせるしかないのでしょうか。 なんだかとても面倒くさい作りなので、これが普通の作り方だと思えません。 スレッドからもっと簡単にTextViewの文字列の変更をする方法はありませんか? 2週間調べてもわからなかったので、具体的なコードを教えていただけると助かります。 よろしくお願いします。

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

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

  • ベストアンサー
noname#161640
noname#161640
回答No.1

>そのスレッドから画面のTextViewの文字の変更を行うには、sendBroadcastをActivityで受け取って、activityの中で文字変更を行わせるしかないのでしょうか。 そのように設計されていますから、そうするのがもっとも一般的なアプローチだろうと思います。 >スレッドからもっと簡単にTextViewの文字列の変更をする方法はありませんか? スレッドというと、これはサービスの中で回っているスレッドのことですよね? なら、ありません。 >なんだかとても面倒くさい作りなので、これが普通の作り方だと思えません。 面倒くさいのであれば、サービスなど用意せず、Activity内ですべて動かすようにすればよいでしょう。

rinet8223
質問者

お礼

やはり、そのような仕様なのですね。 よく判りました。 解答ありがとうございました。

関連するQ&A

  • Androidの並列処理(定期実行)

    http://d.hatena.ne.jp/shuji_w6e/20090701/1246459813 上記のURLを参考に、定期的にGPS情報を取得しDB登録するSampleプログラムを作成しました。 public void run() {    textView.setText(new Date().toString()); } } のrun()の中身をGPS取得する処理に変更しただけで、そこまでは上手くいきました。 このSampleは単一のActivityクラスだけで構成されていますが、この「定期的にGPS情報を取得する」という処理を別クラスにしたいと考えました。 そこでActivityを継承した、「GetGpsService」というクラスを作成し、そのクラスをmainのActivityから呼び出せばいいと思ったのですが、上手くいきません。 単純にmainのActivityで、GetGpsServiceのインスタンスをnewすれば、GetGpsServiceのonCreateが実行されて処理が実行されると思っていたのですが、newしてもクラス内のどこのBreakPointにも止まりませんでした。根本的な考え方が間違っているのでしょうが、別クラスにしたGPS情報の定期取得処理をmainのActivityから呼び出すには、どのようにしたら良いのでしょうか? 画面変遷がなくても、intent等を使う必要があるのでしょうか?

    • ベストアンサー
    • Java
  • 画面の更新とスレッド

    ボタンを押すと、テキストボックスに10msごとに文字列を追加する関数実行するプログラムを作成したのですが、実行している間プログラムの画面の操作を受け付けなくなってしまいます。 そこで、 http://msdn.microsoft.com/ja-jp/library/ms171728(VS.80).aspx を参考にして、メインスレッド以外のスレッドからテキストボックスに書き込むようにしました。 しかし、このようにしても、 Application::DoEvents(); を、forの中で実行して強制的に画面を再描画させないと、インターフェイスへの操作を一切受け付けなくなってしまいます。 Windowsフォームの描画は、いったいどの様なタイミングで行われているのでしょうか? また、このようなインターフェイスの操作を受け付けなくなることを回避するには、 Application::DoEvents(); 以外には良い方法は無いのでしょうか?

  • androidのオプションメニューについて

    androidアプリの作り方を勉強しているのですが、オプションメニューを実装しようと思いonCreateOptionMenuを書いたのですが、エミュレータでメニューボタンを押してもメニューが現れません。onCreateOptionMenu内でTextViewの文字を変更するようにしたのでが、TextViewは変更されず、そもそもonCreateOptionMenuがスルーされているようです。だれか、わかる方がいたらご教授お願いします。 以下ソースです。 シンプルにしたのですが問題がわかりません。 import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; public class Test04Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onCreateOptionMenu(Menu menu){ super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } }

  • Androidのマルチスレッド処理の開始タイミング

    組み込みボード上にAndroidOSをのせ、 その上でRS232C通信制御するプログラムを作成しております。 RS232C通信制御についてはThreadクラスを派生させたクラスを 作成し、マルチスレッド処理として、アプリ起動中に、常に動作させたい と考えています。 このとき、RS232C通信制御するスレッドを 開始するタイミング、終了するタイミングはメインアクティビティのどの タイミングで行うのが1番よいのでしょうか? 現状は以下で考えています。 public class MainActivity extends Activity { ComCtrl m_ComCtrl ; // RS232C通信制御スレッド protected void onCreate(Bundle savedInstanceState) { m_ComCtrl = new ComCtrl( null ) ; // スレッド生成 m_ComCtrl.start() ; // スレッド開始 } protected void onDestroy() { m_ComCtrl.halt() ; // スレッド終了(スレッドメインループを終了させる独自メソッド) } }

    • ベストアンサー
    • Java
  • 画面遷移について

    早速質問なんですが、今 1.ホーム画面は地図(google Map)を表示、また画面遷移用のボタンを設置してある。 2.ボタンを押すとカメラを使う画面に遷移し、そこでとりあえず写真を撮る。(ここではカメラを実行するActivityと、SurfaceView を継承したクラスを別クラスにて実装しております。) 3.取った後に勝手に画面遷移させ(元のMap画面へ)、撮った写真の緯度、経度を取得したうえで現在地情報を表示させる。→表示させる際はFacebookなどにある、ピンをMap上に表示させるような感じで、さらにその場所の住所、画像も表示させる、といったイメージです。 このような仕様のアプリを作っております。簡単に言えば、写真を撮ったら現在地の情報がわかる!といったアプリです。 ここで、カメラ画面から元のMap画面に画面遷移させたいのですが、通常Activity間の画面遷移はIntentを使用するのが一般的ですが、この場合だとどのように実装すれば可能でしょうか? 自分としてはHandlerクラスのメンバをSurfaceView を継承したクラスで用意して、Activityに対してそのクラスを呼び出すコードを実装すれば行けるのかなぁ…と考えているのですが。 初対面でいきなりの質問で誠に申し訳ございませんが、ご回答お待ちしております。 必要であればプログラムコードもお送りいたします。よろしくお願いいたします。

    • ベストアンサー
    • Java
  • java のスレッドについて

    java のスレッドについて javaでスレッドを作って処理をさせたいと思います。 メインのクラスでスレッドAを呼び出し、スレッドAで計算をしてその結果をメインのクラスで利用したい場合、一番簡単な方法は何でしょうか? なお、メインのクラスは、 while (Thread.isAlive()); な感じでスレッドが終わるまで処理を止めておきたいと思います。 簡単なコードを書いていただけないでしょうか?

    • ベストアンサー
    • Java
  • Android実行時のエラー(実機にて)

    Androidアプリ開発初心者の者です。 下記に記載しています書籍のアプリを 作成中にエラーが起こりスマホのアプリが強制終了と いう形で落ちてしまいます。 【アプリを作ろう! ゼロから学ぶアプリの作成から公開まで Android2.3~4.1対応】  http://ec.nikkeibp.co.jp/item/books/P96130.html Eclipseのコード画面は以下のようになっています。 【OmikujiActivity.java】 package makeApplication.omikuji; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class OmikujiActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 文字を表示する TextView tv = (TextView) findViewById(R.id.action_settings); tv.setText("おみくじアプリ"); } } 下から4行目のaction_settingsの部分は書籍では補完候補で、 hellow_view:int - R.idがポップアップ表示されているのですが、 現在私のコード画面には表示されず、仕方なくaction_settingsを選択しています。 上記で保存し実行すると、スマホの実機の方で「おみくじ」と表示されず、 そのまま強制終了してしまい再度実行を促されてしまいます。 action_settingsの部分が原因なのかどうかよく 分からないのでお詳しい方ぜひ教えて頂きたいです。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 画面(?)のサイズが大きくなってしまいました

    なぜか画面(?)のサイズが大きくなってしまい、はみ出ていて見づらいです。 なので直したいのですが、どうすれば良いでしょうか? 設定→コントロールパネル→画面 で変更してみたら 一応小さくはなったんですが、同時に文字やショートカットなど、全てが小さくなってしまい、これも見にくいです。 いちいち文字のサイズを変更するのも面倒ですし・・・。 文字のサイズ等は変えずに、画面の大きさだけ変えたいです。

  • AndroidのFragmentの画面遷移について

    AndroidのFragmentを使った画面遷移のプログラムが、実機で動作確認をしようとした瞬間、「問題が発生したため・・・・」と出て、動きません。ビルドは問題ないので、レイアウトが怪しいと思うのですが、わかりません。 ----------------------fragment_first.xml------------------------ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.ya_ka_do.test001.FirstFragment"> <!-- TODO: Update blank fragment layout --> <TextView android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" /> </FrameLayout> ----------------------MainActivity.java-------------------------- protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FirstFragment firstfragment = new FirstFragment(); fragmentTransaction.replace(R.id.container,firstfragment); fragmentTransaction.commit(); } です。他は、とくに変更してないのですがどこか間違ってますか?

  • Android-Login後にGPS取得する

    Androidのアプリを開発しています。 起動時にログイン処理を行い、それが成功したらGPSを定期的に取得するサービスの起動を行いたいと思っていますが、上手くいきません。 1.ログイン中は「ログイン中です」、完了したら「ログイン完了」と表示したいのですが   onCreateのは画面の表示前なので、これらの処理をするとしたらonCreateで、   ログインの処理を行うThreadを起動する。という考え方であってますでしょうか? 2.またログインをThreadで起動したとして、それが成功したらGps取得を行う処理実行。     という流れを考えていますが、定期的なGps取得のサービスはonCreateで実行しています。   そのため、「Loginが成功したら、Gps取得サービスを開始」という事ができません。   どのような作りにすれば、できますでしょうか?

    • ベストアンサー
    • Java