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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

8121閲覧

Spinnerの選択値を動的に変更した後、デフォルト値(選択値)が表示されない

nagomi72

総合スコア51

Java

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

Android

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

Android Studio

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

0グッド

1クリップ

投稿2019/01/20 10:36

編集2019/01/20 10:38

2つのSpinnerがあり、左側のSpinnerの選択値により右側のSpinnerの選択肢を動的に変更するプログラムを作成しています。

左側のSpinnerで値を選択すると、右側のSpinnerの現在選択されている値が表示されなくなります。(選択肢自体は動的に変化しており、値も選択可能)
何か回避策のご助言を頂きたく存じます。

以下、スクリーンショット及びソースコードです。

イメージ説明
イメージ説明

package com.example.testlayout; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import java.util.Calendar; public class MainActivity extends AppCompatActivity { ArrayAdapter end_month_adapter; boolean first_time_flg = true; String selected_end_month; Calendar cal; Spinner end_day_spinner; ArrayAdapter end_day_adapter; int current_year; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cal = Calendar.getInstance(); //月の選択肢 String[] end_month_list = new String[12]; for (int i = 0; i < 12; i++) { end_month_list[i] = String.valueOf(i + 1); } Spinner end_month_spinner = (Spinner)findViewById(R.id.end_month_spinner); end_month_adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, end_month_list); end_month_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); end_month_spinner.setAdapter(end_month_adapter); //monthのスピナーのリスナー end_month_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (!first_time_flg) { //選択されている月取得 selected_end_month = (String) parent.getSelectedItem(); //対象の月の最終日を取得 cal.set(Calendar.MONTH, Integer.parseInt(selected_end_month) - 1); int max_day = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //選択されている月に応じて選択できる日数を変更(2月→28日) String [] end_day_list = new String[max_day]; for (int i = 0; i < max_day; i++) { end_day_list[i] = String.valueOf(i + 1); } end_day_spinner = (Spinner) findViewById(R.id.end_day_spinner); Context context = getApplicationContext(); end_day_adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_item, end_day_list); end_day_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); end_day_spinner.setAdapter(end_day_adapter); } else { first_time_flg = false; } } @Override public void onNothingSelected(AdapterView<?> parent) { //なんもなし } }); //1月の日数取得 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH,0); int max_day = cal.getActualMaximum(Calendar.DAY_OF_MONTH); String[] end_day_list = new String[max_day]; for (int i = 0; i < max_day; i++) { end_day_list[i] = String.valueOf(i + 1); } end_day_spinner = (Spinner) findViewById(R.id.end_day_spinner); end_day_adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, end_day_list); end_day_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); end_day_spinner.setAdapter(end_day_adapter); } }
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Spinner android:id="@+id/end_month_spinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <Spinner android:id="@+id/end_day_spinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout> </android.support.v4.widget.DrawerLayout>

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

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

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

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

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

guest

回答1

0

ベストアンサー

Android 9.0 エミュレータですが, 再現できません.
起動→[月=1,日=1]→月3を選択→[月=3,日=1]→日31を選択→[月=3,日=31]→月2を選択[月=2,日=1]
という感じです.

投稿2019/01/21 04:49

jimbe

総合スコア12632

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

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

nagomi72

2019/01/21 05:50

私は実機を使用しており、SO-01G,バージョンは6.0です。 再現できないというのは、右側の選択値が表示されているという認識でよろしかったでしょうか。
jimbe

2019/01/21 06:11

はい, 左を選択すると右は 1 になります. そして, 6.0 でエミュレートすると再現しました. バージョンによって動作が異なることがあるようですね.
nagomi72

2019/01/21 06:24

なるほど…。恐らく私の環境では、Themeの兼ね合いで文字色が白色で出力されているようです。 検証頂きありがとうございました。
jimbe

2019/01/21 06:38

原因が分かりました. onItemSelected の中にある end_day_adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_item, end_day_list); の context の部分を MainActivity.this に変えてみてください. これは Context の違いによる文字色の違いでしたね.
nagomi72

2019/01/22 11:09

やはりContextでしたか。 原因解明までして頂き、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問