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

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

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

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

Android Studio

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

Q&A

解決済

1回答

3714閲覧

【ViewPager】フリック直後のイベントで、TextViewの値を変えたい

nnnnn

総合スコア26

Android

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

Android Studio

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

0グッド

0クリップ

投稿2016/05/02 13:01

編集2016/05/02 13:21

###前提・実現したいこと
Android studioでアプリ開発をしています。

フリックで画面を移動するページを作るために
ViewPagerとPagerAdapterを使用しています。

<実現したいこと>
フリックで画面を移動した後に、
表示中の画面に配置したTextViewに値を設定したいと考えています。

<現状・エラー>
onPageScrollStateChangedの中で
SCROLL_STATE_IDLEの場合に
TextViewのtextを変えようとしています。
しかし、「問題が発生したため、(アプリ名)を終了します。」と表示され
アプリが落ちてしまいます。

###発生している問題・エラーメッセージ

「問題が発生したため、(アプリ名)を終了します。」と表示される

###該当のソースコード01

java

1 private class MyOnPageChangeListener 2 extends ViewPager.SimpleOnPageChangeListener { 3 private static final String TAG = "OnPageChangeListener"; 4 @Override 5 public void onPageScrollStateChanged(int state) { 6 switch (state) { 7 // ページの移動完了時 8 case ViewPager.SCROLL_STATE_IDLE: 9 if (myPosition == 0) { 10 TextView textView = (TextView)layout.findViewById(R.id.text001); 11 textView.setText("bbb"); 12 } 13 break; 14 // ドラッグ終了時 15 case ViewPager.SCROLL_STATE_SETTLING: 16 break; 17 // ドラッグ開始時 18 case ViewPager.SCROLL_STATE_DRAGGING: 19 break; 20 default: 21 break; 22 } 23 } 24

###該当のソースコード02

@Override protected void onCreate(Bundle savedInstanceState) { (中略) super.onCreate(savedInstanceState); setContentView(R.layout.activity_aaa); mViewPager = (ViewPager) findViewById(R.id.viewpager); mViewPager.setOffscreenPageLimit(1); mPagerAdapter = new MyPagerAdapter(); mViewPager.setAdapter(mPagerAdapter); mViewPager.addOnPageChangeListener( new MyOnPageChangeListener() ); }

###ログキャット

05-02 22:09:04.449 30963-30963/***** D/AndroidRuntime: Shutting down VM 05-02 22:09:04.449 30963-30963/***** V/DeployGateUncaughtExceptionHandler: DeployGate caught an exception, trying to send to the service 05-02 22:09:04.462 30963-30963/***** E/AndroidRuntime: FATAL EXCEPTION: main Process: *****, PID: 30963 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at *****.aaaActivity$MyOnPageChangeListener.onPageScrollStateChanged(aaaActivity.java:131) at android.support.v4.view.ViewPager.dispatchOnScrollStateChanged(ViewPager.java:1811) at android.support.v4.view.ViewPager.setScrollState(ViewPager.java:404) at android.support.v4.view.ViewPager.access$000(ViewPager.java:91) at android.support.v4.view.ViewPager$3.run(ViewPager.java:250) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:549) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio 2.1

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

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

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

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

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

yona

2016/05/02 13:05

ログキャットのログを追記してください。また、ViewPagerにListnerを追加している箇所のコードも追記してください。
nnnnn

2016/05/02 13:19 編集

ありがとうございます! 追記させていただきました!
guest

回答1

0

ベストアンサー

変数layoutは何者でしょうか。

findViewByIdをした結果該当するViewが存在しないため、textViewがnullになり、この変数のメソッドを使用しようとした結果NullPointerExceptionが発生しています。
引数のidやlayoutが正しいかを確認する事で解決につながると思います。

投稿2016/05/02 13:33

yona

総合スコア18155

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

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

nnnnn

2016/05/02 13:45

layoutは、instantiateItemの中で使用しており、 page1.xmlやpage2.xmlといったページを設定し、その2ページをフリック移動する形にしています。 public Object instantiateItem(ViewGroup container, int position) { inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); int[] pages2 = {R.layout.page1, R.layout.page2}; layout = inflater.inflate(pages2[position], null); ・・・ ((ViewPager) container).addView(layout); return layout; } onPageScrollStateChangedでは layoutに値を設定していなかったため、その点の見直しから始めたいと思います。 ありがとうございます!
nnnnn

2016/05/02 13:52

追記です。 「該当のソースコード01」の下記について、 (変更前) TextView textView = (TextView)layout.findViewById(R.id.text001); (変更後) TextView textView = (TextView)findViewById(R.id.text001); と修正したところ、直りました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問