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>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/21 05:50
2019/01/21 06:11
2019/01/21 06:24
2019/01/21 06:38
2019/01/22 11:09