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

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

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

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

Android

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

Q&A

解決済

2回答

6432閲覧

findViewById がエラーになってしまいます。

xoxoo

総合スコア29

Java

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

Android

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

0グッド

0クリップ

投稿2017/08/22 06:45

編集2017/08/22 07:11

Serviceを継承したクラスでwindowManagerを使用してオーバーレイ表示する小さなTextViewを生成しています。
Service側クラスでfindViewByIdはつかえませんか?

Service側.java

java

1 2private void BindCtrl() { 3 4 5 linearTelop = (LinearLayout) findViewById(R.id.linear_telop); 6 7 8 9 marqueeView = (MarqueeView) findViewById(R.id.marquee_telop); 10 11 }

@Override
public void onCreate() { 時にBindCtrl() を呼び出したいです。

###エラーメッセージ

メソッド findViewById(int) は型 xxxService で未定義です。

java

1 @Override 2 public int onStartCommand(Intent intent, int flags, int startId) { 3 4 // inflaterの生成 5 LayoutInflater layoutInflater = LayoutInflater.from(this); 6 7 windowManager = (WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 8 WindowManager.LayoutParams params = new WindowManager.LayoutParams( 9 WindowManager.LayoutParams.MATCH_PARENT, 10 WindowManager.LayoutParams.WRAP_CONTENT, 11 WindowManager.LayoutParams. TYPE_SYSTEM_ERROR, 12 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 13 | WindowManager.LayoutParams.FLAG_FULLSCREEN 14 | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR 15 | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 16 | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 17 // | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE 18 | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 19 PixelFormat.TRANSLUCENT); 20 21 // 最下部に配置 22 params.gravity= Gravity.BOTTOM | Gravity.CENTER; 23 24 //params.x = 20 * dpScale; // 20dp 25 // params.y = 100 * dpScale; // 80dp 26 27 // レイアウトファイルからInfalteするViewを作成 28 view = layoutInflater.inflate(R.layout.overlapservice, null); 29 30 // Viewを画面上に追加 31 windowManager.addView(view, params); 32 33

としていてoverlapserviceのレイアウトファイルにはfindViewByIdしたいViewを記述しています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

findViewById()はActivityクラスまたはViewクラスに含まれるメソッドですので、それらのインスタンスを代入した変数を介さなければ呼び出すことはできません。参考にしたサイトでも、

View layout = inflater.inflate (R.layout.toast_layout, null);
ImageView image = (ImageView) layout.findViewById(R.id.image);

のようにlayoutというView型の変数を介することで呼び出しています。Serviceを継承したクラスの中では、こうした手段なしに直接findViewById()を呼ぶことはできません。

投稿2017/08/22 14:11

keicha_hrs

総合スコア6768

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

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

xoxoo

2017/08/25 04:22

ありがとうございます!さっそく試してみます。
guest

0

定義されていないものは使えません。
LayoutInflaterをつかってレイアウトファイルからViewを作らないといけませんね。

投稿2017/08/22 07:05

編集2017/08/22 07:05
yona

総合スコア18155

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

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

xoxoo

2017/08/22 07:12

レイアウトには書いてあるのですが・・・・ 追記部分見ていただいてもよろしいでしょうか?
yona

2017/08/22 07:16 編集

それならView#findViewByIdでメソッドを使用できます。
xoxoo

2017/08/22 07:21

それでもできないというのはServiceを継承したクラスだからでしょうか・・
yona

2017/08/22 07:51

継承は関係ないと思いますよ。 「それでも」とはどのようなコードを書いたのでしょうか。 また、「できない」とはどういった状況ですか。
yona

2017/08/22 08:21 編集

「できない」とはどういった状況ですか? あなたのコードの現状を知っているのはあなたしかいません、具体的に説明してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問