t2lowと申します。
ご自身で仰られているように以下が原因かと思います。
> spinner1の onItemSelected()が呼ばれて
onItemSelected()が呼ばれて困るのであれば、setOnItemSelectedListener()を呼ぶ前にスピナを初期化するようにすれば回避できると思います。
>eqqさん
コードを見直しましたが数値が間違っているということななさそうです。
>t2lowさん
下記コードのようにadapterの設定とsetOnItemSelectedListenerの設定を分離し
adapter設定 → selection設定 → setOnItemSelectedListener設定の流れで動作させてみましたが
やはりonCreate()終了後にonItemSelected()が呼ばれてしまいました。
■■ ここからLog.dのログ ■■
onCreate() : start
spinner1SetAdapter()
spinner1SetSelection() : 肉
spinner2SetAdapter() : 肉
spinner2SetSelection() : 肉_1
spinner1SetOnItemSelectedListener()
spinner2SetOnItemSelectedListener()
onCreate() : end
onStart()
onResume()
spinner1 : onItemSelected() : 肉
spinner2SetAdapter() : 肉
spinner2SetSelection() : 肉_0
spinner2 : onItemSelected() : 肉_0
spinner2 : onItemSelected() : 肉_0
■■ ここからコード ■■
public class MainActivity extends Activity {
final static int INDEX_SPINNER1_FISH = 0;
final static int INDEX_SPINNER1_MEAT = 1;
final static int INDEX_SPINNER2_FISH_0 = 0;
final static int INDEX_SPINNER2_FISH_1 = 1;
final static int INDEX_SPINNER2_MEAT_0 = 0;
final static int INDEX_SPINNER2_MEAT_1 = 1;
final static String[] spinner1_array = {"魚", "肉"};
final static String[] spinner2_fish_array = {"魚_0", "魚_1"};
final static String[] spinner2_meat_array = {"肉_0", "肉_1"};
final static String TAG_LogD = "DebugMessage";
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG_LogD, "★★★★★★★★★★★★★★★★\nonCreate() : start");
int position1 = INDEX_SPINNER1_MEAT;
int position2 = INDEX_SPINNER2_MEAT_1;
spinner1SetAdapter();
spinner1SetSelection(position1);
spinner2SetAdapter(position1);
spinner2SetSelection(position2);
spinner1SetOnItemSelectedListener();
spinner2SetOnItemSelectedListener();
Log.d(TAG_LogD, "onCreate() : end");
}
void spinner1SetAdapter() {
Log.d(TAG_LogD, "spinner1SetAdapter()");
String[] strings = spinner1_array;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, strings);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
((Spinner)findViewById(R.id.spinner1)).setAdapter(adapter);
}
void spinner1SetSelection(int position1) {
Log.d(TAG_LogD, "spinner1SetSelection() : " + spinner1_array[position1]);
((Spinner)findViewById(R.id.spinner1)).setSelection(position1);
}
void spinner1SetOnItemSelectedListener() {
Log.d(TAG_LogD, "spinner1SetOnItemSelectedListener()");
((Spinner)findViewById(R.id.spinner1)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG_LogD, "spinner1 : onItemSelected() : " + parent.getSelectedItem());
spinner2SetAdapter(position);
spinner2SetSelection(0);
}
@Override public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
void spinner2SetAdapter(int position1) {
Log.d(TAG_LogD, "spinner2SetAdapter() : " + spinner1_array[position1]);
String[] strings = (position1 == INDEX_SPINNER1_MEAT) ? spinner2_meat_array : spinner2_fish_array;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, strings);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
((Spinner)findViewById(R.id.spinner2)).setAdapter(adapter);
}
void spinner2SetSelection(int position2) {
Log.d(TAG_LogD, "spinner2SetSelection() : " + ((Spinner)findViewById(R.id.spinner2)).getAdapter().getItem(position2).toString());
((Spinner)findViewById(R.id.spinner2)).setSelection(position2);
}
void spinner2SetOnItemSelectedListener() {
Log.d(TAG_LogD, "spinner2SetOnItemSelectedListener()");
((Spinner)findViewById(R.id.spinner2)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG_LogD, "spinner2 : onItemSelected() : " + parent.getSelectedItem());
}
@Override public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
@Override protected void onStart() {
super.onStart();
Log.d(TAG_LogD, "onStart()");
}
@Override protected void onResume() {
super.onResume();
Log.d(TAG_LogD, "onResume()");
}
}
--
このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-sdk-japan/-/QRKuJDCqyJIJ にアクセスしてください。