質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

0回答

368閲覧

一定時間経過後にページ遷移

Yamajun

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2023/06/07 08:07

編集2023/06/08 09:56

Android で一定時間画面操作がされない場合トップ画面に遷移する
というプログラムを作っています。
バグがおきつまずいています。
皆さんのお力はお貸しください。
Java を使用しています。

【言語】
Java

【やりたいこと】
dispatchTouchEventを使用してタッチ感知をします。タッチ感知されてから一定時間過ぎたら、トップ画面に遷移する
・ボタンなどでページが変わっても同じdispatchTouchEventを使ってタッチを感知させたいです。

【バグ】
画面遷移した際にイベントが2回発生してしまう。
今回の場合
・トップページに戻る動作が2回行われてしまう。
・イベントが引き継がれない

【教えて欲しいこと】
・解消法
・全ての画面で一定時間経過後、トップページ遷移をする方法
・下記ソースに問題点

継承される先に何か記述が必要でしたら教えてください。

説明不十分なところがあると思います。
申し訳ありません。

もし、私のやりたいことができるソースの持っている方がいたら教えていただきたく思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2023/06/07 08:14 編集

質問タグを関連性の高いものに修正してください。5つまで設定できたはずなので。 あと、コードはマークダウンのcodeにてご提示ください。 コードや設定も他者がコピペで再現出来る程度に提示されたほうがアドバイスも得やすくなると思います。 質問は編集できますので。
jimbe

2023/06/07 08:38 編集

>継承はできていますが、画面遷移した際に親のイベントと継承された子のイベントが走ってしまいます。 何のことを言っているのか分からないのですが。 継承はできているとは何のことでしょう。 遷移した際のイベントとは? コンパイル・実行が出来て実行するとイベントが多数発生する様子がログ等で分かるような、コード・データ等をご提示頂けませんでしょうか。 ついでに、 java の質問であれば "kotlin" のタグは付けないほうが良いでようし、"プログラミング言語"というのはプログラミング言語についての質問という意味で、本件は言語についてでは無いように思います。 そして android についての質問なのですから "android" のタグは付けたほうが良いのではないでしょうか。
hoshi-takanori

2023/06/07 10:00

そのメソッドをどのクラスに書いてるんでしょうか? また、画面遷移はどのようにしていますか? 例えば、すべての Activity の親クラスとして BaseActivity クラスを作ってそこに書いた場合、 ・画面を開いた直後はタイマー動いてないのでは? ・別の画面 (Activity) に遷移した場合、元の画面のタイマーを止める必要があるのでは? ・もちろん、MainActivity ではタイマーは無効にしてますよね?
Yamajun

2023/06/07 10:21

Activity の親クラスとして BaseActivity クラスを作っています。 > 画面を開いた直後はタイマー動いてないのでは? ・画面を開いた直後のタイマーはいりません。 >別の画面 (Activity) に遷移した場合、元の画面のタイマーを止める必要があるのでは? ・その通りです。技術不足ですいません。もし、止めることができるコードを押しておいただけると幸いです。 >もちろん、MainActivity ではタイマーは無効にしてますよね? ・無効にしています。 よろしくお願いします。
hoshi-takanori

2023/06/07 10:35

onPause でタイマーを止めて onResume で再開するとか? (画面を開いた直後のタイマーが不要なら、onResume の場合も不要かも?) いずれにせよ、OS の挙動に詳しくない人が、アプリの全般的な挙動に手を入れると思わぬ副作用があるので、あまりお勧めはしませんね。機種や OS のバージョンによっても変わってきそうだし。専用端末かつ OS バージョン固定で、テストの時間をしっかり取れるならありかな…?
Yamajun

2023/06/08 00:41

hoshi-takanori様 私のやりたいことがわかりました。 今回でいうと、画面操作でページ移動した時、onTouchEventTimerが引き継がれないと言うことです。 もし、私のソースから引き継げるようなことができるようでしたら教えて頂きたいです。 よろしくお願いします
Yamajun

2023/06/08 00:47

追記です。 現在、画面操作してページ遷移した時、onTouchEventTimerはNULLになります
Yamajun

2023/06/08 03:23

onTouchEventTimerの引渡しができれば良いと思っています。
jimbe

2023/06/08 03:56

ページというのが Activity で引き渡しというのが Intent のパラメータとしてという意味でしたら、 CountDownTimer はシリアライズもパーシャライズも出来ませんので Intent に入れることは出来ません。
Yamajun

2023/06/08 04:02

jimbe 様 ありがとうございます。 引き継ぐことはできないと言うことですね。 もし他の方法で引き継ぐ方法がありましたら、教えていただければと思います。
jimbe

2023/06/08 05:13 編集

CountDownTimer で中心となるのは残り時間だと思います。 残り時間なら int で済みますので残り時間を intent で渡し、受け取り側で残り時間で CountDownTimer を再生成すれば(多少誤差は出るでしょうけれど)同じことになると思います。 蛇足ですが、複数のアクティビティでアプリを構成しているのでしたら、アクティビティを1つにして各画面はフラグメントにすることをお勧めします。 アクティビティは(フラグメントより)巨大なオブジェクトで、かつ協調動作やデータを共有したりすることはかなり困難です。 アクティビティをアプリの土台の1つだけとすることで、各画面で共用する CountDownTimer ならアクティビティのフィールドに出来、受け渡し等不要になります。
Yamajun

2023/06/08 05:10

jimbe 様 ありがとうございます。 頑張って実装してみます。 わからなかったら、教えていただければと思います。 よろしくお願いします
Yamajun

2023/06/08 05:25

jimbe 様 今回私が編集を許されているのは、ひとつのアクティビティとなります。 先ほどいただいた助言でうまく実装できませんでした。もっと勉強します。
Yamajun

2023/06/08 05:49

TimerTaskに変更しても Intentに入れることできないのでしょうか? もしできるようでしたら ソースを教えてもらいたいです。
jimbe

2023/06/08 06:43 編集

Intent に入れられるのは Bundle 型に入るものだけです。 Bundle に入るのは、プリミティブ型と、シリアライズ/パーシャル化が可能なオブジェクト型だけです。 具体的に入るか入らないかはそれぞれのドキュメントを確認してください。 java.util.TimerTask(https://developer.android.com/reference/java/util/TimerTask) はシリアライズ/パーシャル化は出来ませんので入れられません。 >今回私が編集を許されているのは、ひとつのアクティビティとなります。 全体に関わるものを一部のコードだけでどうにかしようという状況は、戦略的に問題がありそうなのを戦術的に補おうということで、相当難しいことをさせられている(?)と思われたほうが良いと思います。
Yamajun

2023/06/08 07:00

jimbe 様 ありがとうございます。 ちなみにdispatchTouchEventの中でボタンがクリックされたかどうかの判断はできるのでしょうか?
Yamajun

2023/06/08 07:46

Android で一定時間画面操作がされない場合トップ画面に遷移する というプログラムを教えてください。
jimbe

2023/06/08 09:29

>dispatchTouchEventの中でボタンがクリックされたかどうかの判断 Activity の dispatchTouchEvent メソッドはアクティビティ上であらゆるタッチ操作をした時に最初に呼ばれるメソッドであり、継承して super.dispatchTouchEvent() を呼び出す前ではボタンを押す操作としてのタッチなのかは分かりません。 また、 super.dispatchTouchEvent() 内でアクティビティに乗っている各ビュー/ビューグループのさまざまなメソッドが呼ばれ、最終的にボタンが反応することでボタンのクリックだったということになります。 従って Activity の dispatchTouchEvent() 内でボタン(だった)かどうかの判断は出来ません。 >プログラムを教えてください 今のところご希望に添えそうなコードは私にはありません。 先に hoshi-takanori さんが仰っていたように、 OS を土台とするアプリとしての基本動作を分かっていなければ、失礼ながら例え出来たとしてもメンテ出来ないでしょう。まして、マルチアクティビティの中で一つしか編集してはいけないというような制約があるのでは、手かせ足かせで100m走で9秒を切れみたいなお話に感じます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問