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

안드로이드 버튼, 클래스관련 기초같으니 모두 읽어봐주세요 ㅠㅠ초보라..

0 추천
일단 class 가 두개 있습니다

 

class1       ,       class2 (value라는 값이 계속 증가하고있음)

 

class 1에서  버튼을 눌러서   class2에 있는 value 값이 일정 이상이되면      class1에서 동작을 하게하려는데요

 

setOnClickListener 버튼 눌렀을때

{

               class2   aa = new class2();

               if ( aa.value  > 100 )

               {

                    동작실행

                }                                   이렇게 했었는데 생각해보니까  버튼누르는건 그냥 버튼눌렀을때 한번만 동작되는거라

}                                         class2안에있는 value 값이 변화는걸 체크못하더라고요 어캐해야될까요???!!!도와주세요
kjlolo0 (370 포인트) 님이 2014년 2월 13일 질문

2개의 답변

0 추천
간단한 방법으론 class2에서 일정값이상이면 boolean flag  = true로 저장해두고

class1에서 버튼을 눌렀을때 class2의 플레그를 체크해보는 것은 어떨까요?

 

버튼을 눌렀을때 계속적으로 체크 하다가 100이 넘어가게되면 작동하게끔 만드시려면 아무래도 쓰레드로 계속해서 해당부분을 검사하고 있어야 할 것같네요... ^^
노르망 (220 포인트) 님이 2014년 2월 13일 답변
아 쓰레드공부해야겟네요 ㅠㅠㅋㅋㅋㅋ감사합니다
0 추천

Object 상태 변화가 명확한 것(버튼을 누르면 값이 증가)은

그냥 EventListener로 callback 받는게 좋습니다.

헉헉... 탭이안되네...

//File ClazzA.java
public class ClazzA{

        public void doSomething(){
                //이벤트 발생하여 무언가 동작
                //동작하기
        }
}

//File ClazzB.java
public class ClazzB{

        //이벤트를 발생을 알려줄 리스너입니다. 
        public static interface CountListener{
                void onFireEvent();
        }

        private CountListener listener;
        private int count;

        //값을 더합니다.
        public void addValue(int value){
                this.count+=value;

                //리스너가 존재하고 count가 99를 초과하면
                //리스너에 이벤트를 알립니다.
                if(this.listener!=null && count>99){
                        this.listener.onFireEvent();
                }
        }

        public void setCountListener(CountListener listener){
                this.listener = listener;
        }
}



//File SomeActivity.java
public class SomeActivity extends Activity{

        protected void onCreate(Bundle savedInstanceValue){
                super.onCreate(savedInstanceValue);

                // 클래스 A와 클래스B 생성
                final ClazzA clzA = new ClazzA();
                final ClazzB clzB = new ClazzB();

                //클래스 B에서 발생한 이벤트를 받기위한 리스너 셋팅
                clzB.setCountListener(new CountListener(){

                        @override
                        public void onFireEvent(){
                                //clzB에서 listener.onFireListener를 호출하면
                                //실제 객체는 이곳이 스코프이기 때문에 이곳에서 호출됩니다.
                                clzA.doSomething();
                        }

                });
                findViewById(R.id.btn_click).setOnClickListener(new OnClickListener(){

                        @override
                        public void onClick(View v){
                                clzB.addValue(1);
                        }

                });
        }

}

 

칠리님 (10,910 포인트) 님이 2014년 2월 14일 답변
값을 체크해야 하는 시점이 명확한데 스레드를 돌릴필요는 없죠...
...