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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

232閲覧

findViewByIdについて

退会済みユーザー

退会済みユーザー

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/08/20 06:44

下記のようなクラスを作ったのですがfindViewByIdが使えずに困っています。AppCompatActivityを継承させると使えるということは分かったのですが、その場合でも
LinearLayout linearLayout = (LinearLayout)findViewById(layoutId);
この行で下記のエラーが出てしまいます。どのように解決すればよいのでしょうか?
何度もすみませんがよろしくお願いします。

Process: pakcage, PID: 31183 java.lang.RuntimeException: Unable to start activity ComponentInfo{pakcage/pakcage.MainGame}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2248) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2298) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:212) at android.app.ActivityThread.main(ActivityThread.java:5151) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:120) at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:155) at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:31) at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:55) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:205) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) at pakcage.Set.Set(HaiSet.java:15) at pakcage.MainGame.onCreate(MainGame.java:38) at android.app.Activity.performCreate(Activity.java:5231) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2298)  at android.app.ActivityThread.access$800(ActivityThread.java:144)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:212)  at android.app.ActivityThread.main(ActivityThread.java:5151)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)  at dalvik.system.NativeStart.main(Native Method)  コード
public class Set{ public void set(int layoutId) { LinearLayout linearLayout = (LinearLayout)findViewById(layoutId); } } コード

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

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

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

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

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

guest

回答2

0

findViewByIdはActivityやViewに実装されているメソッドです。
全てのクラスで使用できるわけではありません。
Javaの基礎知識を見直した方がいいですよ。

投稿2017/08/20 08:30

yona

総合スコア18155

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

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

退会済みユーザー

退会済みユーザー

2017/08/20 09:46

いまその基礎を勉強中なもので有識者様には理解できないような質問をしてしまっているのかもしれませんがすみません。 いつも回答ありがとうございます。
guest

0

ベストアンサー

提示されているソースだけでは、Setクラスやsetメソッドがどのように呼ばれているか分からないので、直感ですが、最初に自動で作られたのActivityから呼び出しているのではないでしょうか?

Activityは画面を表しているクラスです。
なので、SetクラスにActivity(AppCompatActivityを含む)を継承しても、Setクラスは何も配置されていない別の画面ということになるので、layoutIdで指定したLinearLayoutは存在しないということになるため、エラーになります。

そのLinearLayoutがあるActivity上でfindViewByIdを実行するのが一番簡単だと思います。
どうしてもSetクラスで呼び出したい場合は、以下のようにActivityを渡す必要があります。

Java

1public class Set{ // Activity(AppCompatActivity)は継承しない 2 public void set(Activity activity, int layoutId) { 3 LinearLayout linearLayout = (LinearLayout)activity.findViewById(layoutId); 4 } 5}

投稿2017/08/20 07:43

fiveHundred

総合スコア9803

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

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

退会済みユーザー

退会済みユーザー

2017/08/20 09:52

情報不足の質問をしてしまいすみません。 教えていただいたActivityを呼び出す方法を試した結果そこでのエラーはなくなりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問