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

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

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

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

Android Studio

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

Q&A

解決済

1回答

4567閲覧

[Android]ToolBarのクリックイベントとテキストの変更

kome92

総合スコア10

Java

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

Android Studio

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

1グッド

0クリップ

投稿2018/06/09 08:04

編集2018/06/09 08:48

AndroidStudioにてアプリ開発を始めました。

ToolBarにて、以下のようなことを行いたいと思っております。

【想定画面(ツールバー)】
← 2018/6/9 →

【想定動作】
←:押したら中央の日付が前日に変化
→:押したら中央の日付が翌日に変化
2018/6/9:押したらクリックイベント発生


最初は日付表示部分をToolBarのTitleで表示し、
menuのitemで「←」「→」を追加して変更していたのですが
2018/6/9 ← →
・日付の左側に「←」を配置できない
・日付のクリックイベントを起こせない
となってしまったので諦め、

次にすべてmenuのitemに追加したら
← 2018/6/9 →
表示は想定通りの並びになったのですが、
・日付のtextの変更方法がわからない
となってしまいました。

itemのtextを動的に変更する方法が調べても上手く探せなかったため、
教えていただけましたら幸いです。
もしくは、他に良い実装方法などがありましたら教えてください。

よろしくお願いいたします。

<追記>
以下の方法で、「←」「→」を押したときに日付部分を変更することが出来ました。

menu_main.xml

1<?xml version="1.0" encoding="utf-8"?> 2<menu xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"> 4 <item 5 android:id="@+id/before_day_button" 6 app:showAsAction="always" 7 android:title="←" /> 8 <item 9 android:id="@+id/the_day_button" 10 app:showAsAction="always" 11 android:title="ひづけ" /> 12 <item 13 android:id="@+id/next_day_button" 14 app:showAsAction="always" 15 android:title="→" /> 16</menu>

MainActivity.java

1 @Override 2 public boolean onOptionsItemSelected(MenuItem item) { 3 switch (item.getItemId()) { 4 case R.id.before_day_button: 5 View aaa = toolbar.findViewById(R.id.the_day_button); 6 TextView tv = (TextView) aaa; 7 tv.setText("前日"); 8 break; 9 case R.id.next_day_button: 10 View bbb = toolbar.findViewById(R.id.the_day_button); 11 TextView tva = (TextView) bbb; 12 tva.setText("翌日"); 13 break; 14 } 15 return true; 16 }

ですが、同じ処理をonCreate()上で記述すると起動エラーで落ちてしまいます。
※最初に表示する本日の日付を入れたいため、起動時に書いています。

MainActivity.java

1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 6 // ツールバーをアクションバーとしてセット 7 toolbar = (Toolbar) findViewById(R.id.tool_bar); 8 toolbar.setTitle(""); 9 // ツールバーの準備後に呼ぶ 10 setSupportActionBar(toolbar); 11 // 今日の日付を設定 12 View v = toolbar.findViewById(R.id.the_day_button); 13 TextView tv = (TextView) v; 14 tv.setText("今日"); 15 }

初期表示時にどのように変更できますでしょうか。。

教えていただけたらと思います。
よろしくお願いいたします。

keicha_hrs👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードとして示されていませんが、多分

Java

1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 getMenuInflater().inflate(R.menu.main, menu); 4 return true; 5 }

のようにしてonCreateOptionsMenu()を記述されているかと思います。このメソッドが実行されるのはonCreate()を抜けた後になりますが、オプションメニューが表示されるのは、ここでinflate()を実行した時点になりますので、それ以前にViewを取得しようとしてもnullが返ります。nullの変数にsetText()をしようとしたから、NullPointerExceptionで落ちているものと思われます。初期値を設定したいなら、inflate()の後にすることになりますね。

ただ、MenuItemをTextViewとして取得するのは常道ではないように思います(でも動くのね・・・)。

Java

1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 getMenuInflater().inflate(R.menu.main, menu); 4 MenuItem item = menu.findItem(R.id.the_day_button); 5 item.setTitle("今日"); 6 return true; 7 }

で表示できるんじゃないでしょうか。

onOptionsItemSelected()の方も、

Java

1 @Override 2 public boolean onOptionsItemSelected(MenuItem item) { 3 switch (item.getItemId()) { 4 case R.id.before_day_button: 5 MenuItem it = toolbar.getMenu().findItem(R.id.the_day_button); 6 it.setTitle("前日"); 7 break;

にした方がいいような気がします。

投稿2018/06/10 05:59

keicha_hrs

総合スコア6768

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

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

kome92

2018/06/11 13:09

丁寧なご回答ありがとうございます。 仰る通りに記述しましたら、無事想定通りの挙動になることができました! onCreateOptionsMenu()のところに、このように記述するのが考えもつかなかったので目から鱗が落ちる思いです。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問