본문 바로가기

Android Studio

안드로이드 비슷한 기능의 여러 버튼 한번에 처리 - Resource

반응형

가령 숫자버튼 1 ~ 20번까지 있으며 클릭 될때 클릭된 번호의 숫자만 받아 오는 프로그램이 있다고 치면

1~20번의 버튼을 어떻게 해야 할까요?

정말 단순하게 작업 한다면 findViewById 20번에 setOnClickListener도 20번이면 되겠네요...

뭐 애드온 ButterKnife를 사용하면 findViewById는생략해도되니 setOnClickListener 만 20번 돌리면...

혼자 배우다 보니 정말 전 이렇게 작업을 했네요.

위와 같은 역활의 버튼 처리를 좀 더 단순하게 만들어 본다면...

Button 1 ~ 20번 까지의 id = button_no_1 ~ button_no_20 번 까지 있다고 하겠습니다.

 

Button[] buttonNo = new Button[20];
for (int i = 0; i < buttonNo.length; i++) {
    String buttonId = "button_no_" + (i + 1);
    buttonNo[i] = findViewById(getResources().getIdentifier(buttonId, "id", getPackageName());
}

Fragment에서 한다면 아래 코드로 적용 하시면 됩니다.

buttonNo[i] = view.findViewById(getResources().getIdentifier(buttonId, "id", (getActivity()).getPackageName()));

getResources().getIdentifier(리소스 이름, 리소스 타입, 패키지명);
리소스 이름은 각 버튼의 id값 이며

리소스 타입의 종류에는 - id, srting, drawable등 R.java에서 쓰이는 타입 입니다.

패키명은 현재 작업중인 패키지의 이름

for (Button buttonId : buttonNo) {
      buttonId.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
			Button result = findViewById(view.getId());
            Toast.makeText(MainActivity.this, "클릭 : " + result.getText().toString()
            			, Toast.LENGTH_SHORT).show();
       }
    });
}

버튼 클릭 처리는 for문을 사용 buttonNo 수 만큼 setOnClickListener를 달아 주며 

클릭 이 발생 하면 view.getId()를 result에 넘겨 현재 클릭된 버튼의 값을 출력 하는 것입니다.

 

간단한 계산기 만들때 적용해 보시면 좋을듯 합니다.

초보 탈출의 그날까지..

반응형