안드로이드 스피너 값 전달

조회수 1511회

String[] items = { "4개월 미만", "4~6개월", "7~12개월", "중성화한 성묘", "일반 성묘", "운동량이 많은 성묘", "노묘", "비만묘"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);




    // (밑에부터) 스피너 쓰기위해 쓰는 코드 //
    Spinner spinner = findViewById(R.id.spinner); // 스피너 초기화
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(  // 배열을 스트링타입으로 쓰겠다.
            this, android.R.layout.simple_spinner_item, items);
    adapter.setDropDownViewResource(
            android.R.layout.simple_spinner_dropdown_item);



    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }    // 스피너 쓰기위한 어뎁터 메소드 선언부
    });

    Button button = findViewById(R.id.button);

    if (items.equals("노묘")) {
        if ( button != null ) {
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        showToast("g");

                }
            });
        }

    }



}

public void showToast(String data) { //토스트메세지 메소드 생성
    Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}

}

위처럼 스피너를 생성하고 배열을 만들었습니다. 제가 스피너에서 예를 들어 '노묘'를 선택했을때 임의로 짠 토스트 메세지가 뜨게하고싶은데 저렇게 해서는 안나오더군요 .. 어떻게하죠??

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • if (items.equals("노묘")) {
    

    1 스피너의 상태가 "노묘"가 되었을 때.

    button.setOnClickListener(new View.OnClickListener() {
    

    2 버튼에 클릭 리스너를 등록할 것이다.

    라는 목적을 갖고 작업하신듯 합니다만...

    생각을 다르게 해봅시다.

    일단 '버튼 클릭 리스너'를 먼저 등록하고() {
        스피너에 저장된 값을 읽어오도록 설정하는 게 어떨까요?
    }
    

    제 생각엔 이렇습니다.

    if ( button != null ) {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String selectedItemName = spinner.getSelectedItem().toString();
                if (selectedItemName.equals("노묘")) {
                    showToast("g");
                } else if (selectedItemName.equals("비만묘")) {
                    showToast("h");
                }
            }
        });
    }
    

    애초에 1번 -> 2번의 순서를 달성하기 위해서는

    스피너의 값 또한 버튼과 동일하게

    상태가 변동되는 작업을 감시할 수 있는 장치가 필요합니다.(존재하긴 합니다. https://mailmail.tistory.com/16 참고하세요)

    그리고 단순히 if문을 onCreate 시점에 넣어서는 그 어떤 객체의 상태값도 감지하지 못합니다.

    그렇다면 버튼 클릭 리스너가 필요하진 않겠죠.

    if (button.onClick) {}
    

    과 같은 형태가 되었을테니까요.

    /** 일단 감지하기 위한 장치를 마련하고, 조건을 붙이시길 바랍니다 **/

    이벤트 리스너가 왜 존재하고, 어떤 형태로 등록해야 동작하는지 고민해보시길 바래요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다. 다른일있어서 일주일만에 다시건드니까 제가 작성한 코드의 흐름도 까먹어서 어렵네요 ㅋㅋㅋㅋ 알려주신거 이해는 둘째치고 바로 적용해보니까 됬습니다. 더 살펴보면서 이해하고 반드시 제꺼로 만들겠습니다. 감사합니다ㅎㅎ 알 수 없는 사용자 2020.5.28 20:35

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)