마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

어플 개발 입문자입니다. 스피너 관련 질문좀 드리고자합니다.

0 추천
public class Test4Activity extends Activity {

 

ArrayAdapter<CharSequence> adspin;

boolean mInitSpinner;
View page1, page2;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

 

page1 = (LinearLayout) findViewById(R.id.layer1);
page2 = (LinearLayout) findViewById(R.id.layer2);
Spinner spin = (Spinner) findViewById(R.id.spinner1);
spin.setPrompt("메뉴선택 테스트");

adspin = ArrayAdapter.createFromResource(this, R.array.selectfunc, android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(adspin);

spin.setOnItemSelectedListener(new OnItemSelectedListener(){

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
if (mInitSpinner == false){
mInitSpinner = true;
return;
}

Toast.makeText(Test4Activity.this, adspin.getItem(arg2)+"입니다", Toast.LENGTH_SHORT).show();

if(adspin.getItem(arg2)=="Page1")
{
page1.setVisibility(android.view.View.VISIBLE);
page2.setVisibility(android.view.View.INVISIBLE);
}
else if(adspin.getItem(arg2)=="Page2")
{
page2.setVisibility(android.view.View.VISIBLE);
page1.setVisibility(android.view.View.INVISIBLE);
}
}

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

});

}}

 

위에는 제가 책을 참고해서 짜본 겁니다.

프레임 레이아웃 안에 리니어레이아웃 두개가 invisible 상태이고

스피너로 선택할시 페이지가 뜨는 응용 실습을 해보았습니다.

 

그런데 문제가

스피너의 아이템 항목들의 id를 따와서 switch-case나 if 문에 적용시킬수가 없습니다.

.getItemId(position)을 써보려고 했는데, switch()의 괄호안에는 들어가지 않을 뿐더러

R.java에 item 아이디값이 없어서 비교가 불가합니다.

 

또한 .getItem(position) 매서드를 사용하는데 position에 빨간줄이 떠서 에러창에 뜨는대로 arg2로 고치긴 했는데

왜 position이 안먹히는지 모르겠습니다.

 

마지막으로 스피너를 선택하면 메뉴처럼 큰 팝업창이 뜹니다, mfc의 콤보박스처럼 하고싶은데

버전을 낮은걸로 해서 안뜨는 것인지요? 2.3.3버전으로 짜고 있습니다.
android:name (450 포인트) 님이 2014년 10월 30일 질문

1개의 답변

0 추천
음.. 제가 api15를 쓰고 있어서 글쓴님과는 사용가능한 함수가 다르네요 ㅎㅎ

그런데 혹시 onItemSelected 의 인자 값이 무엇을 의미하는지 생각해보셨나요?

디폴트 생성하면 AdapterView<?> arg0, View arg1, int arg2, long arg3 이라고 나오는데

쉽게 활용하자면 AdapterView<?> parent, View view, int position, long id 로 인자명을 바꿔쓰세요

고로 arg2 라고 되있는 값이 포지션에 해당하는 값이구요

스피너와 연결된 onItemSelected 함수는 스피너에 추가된 목록들 중 선택할경우

자동으로 호출되는 함수이므로 getItemId 등으로 포지션 값을 가져오지않고

그냥 switch(arg2) 로 구분하셔도 됩니다.

각 버전 마다 위젯의 디자인이나 색상 등의 차이가 있습니다 글쓴님말대로 버전을 낮은걸로 해서 그런거에요

버전을 유지해야한다면 커스텀해서 만들어야겠지요
초보개발자ㅠ (33,870 포인트) 님이 2014년 10월 30일 답변
정말 감사합니다. 깔끔하게 해결되었습니다^^
...