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

버튼이벤트 관련해서 모르는 부분이 있습니다..

0 추천

 

안녕하세요.

버튼이 3개 있는데, 첫번째 버튼을 눌렀다 떼었을 경우에 관련해서 버튼의 배경화면이 바뀌었다가 다시 원래대로 돌아

오도록 이벤트를 주었습니다. 그런데, 총 3개의 버튼중 어떤것 하나가 클릭이 된다면, 나머지 버튼이 클릭이 되도록 만

않고싶은데 그 방법을 모르겠습니다.

 

예를들어, 지금 첫번째 버튼을 누를 경우에 배경화면이 Gray로 바뀝니다. 여기서 두번째 버튼을 누른다면

첫번째 버튼이 다시 원래의 배경색이 되면서 두번째 버튼의 배경이 Gray가 되도록 만들고 싶습니다.

또한 두번쨰 버튼이 눌린상태(Button의 배경색이 Gray)에서 세번째 버튼을 누르게 된다면 버튼의 배경화면을

Gray로 만들고 싶습니다. 한마디로 클릭된 것에 따라서, 배경색을 주고 싶은데.. 어떻게 코드를 구성해주어야

할지 잘 모르겠습니다 ㅜ ㅜ .. 또한 화면의 맨 아래의 Pay Button을 눌렀을 경우에 버튼이벤트에 위의 Button이 클릭

된것이 오직 하나일때만 토스트 메세지를 "성공" 이라고 뜨게 해야하는데.. 막막합니다 ㅠ ㅠ

소스가 조금 넘치는 부분은 아래의 댓글 부분에 달아보겠습니다.

 

< XML 부분 >

 

< XML 부분 >

<LinearLayout
    android:id="@+id/Payment_DiscountButton_Layout"
    android:layout_below="@+id/Payment_Discount_Layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <Button
        android:id="@+id/Discount_Button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="멤버십 포인트"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="5dp" />

    <Button
        android:id="@+id/Discount_Button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="마일리지 번호"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        />

    <Button
        android:id="@+id/Discount_Button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:text="없음"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        />

</LinearLayout>

 

공산당 (1,960 포인트) 님이 2016년 11월 16일 질문
< Java 부분 >
Payment_Button1 = (Button) findViewById(R.id.Discount_Button1);
Payment_Button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(Payment_Button1_Flag)
        {
            Payment_Button1.setBackgroundColor(Color.GRAY);
            Payment_Button1_Flag = false;
        }
        else {
            Payment_Button1.setBackgroundResource(android.R.drawable.btn_default);
            Payment_Button1_Flag = true;
        }
    }
});








그리고 아래의 Button 부분은 xml 부분입니다.
<Button
    android:id="@+id/Pay"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="결제하기"
    android:textSize="20dp"
    android:textColor="#ffffff"
    android:background="#7b00ff"
    />

그리고 그 Button의 자바 부분입니다.
Payment_Result_Button = (Button) findViewById(R.id.Pay);
Payment_Result_Button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        
    }
});

1개의 답변

0 추천
 
채택된 답변

이렇게 하는걸 말씀하시는 건가요?

 

    private Button mBtnPressed = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        View.OnClickListener listenerClickOptional = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mBtnPressed != null) {
                    //이전에 눌렸던 버튼이 있다면 다시 원래대로 돌리자.
                    mBtnPressed.setBackgroundResource(android.R.drawable.btn_default);
                }

                mBtnPressed = (Button)view;
                mBtnPressed.setBackgroundColor(Color.GRAY);
            }
        };

        findViewById(R.id.Discount_Button1).setOnClickListener(listenerClickOptional);
        findViewById(R.id.Discount_Button2).setOnClickListener(listenerClickOptional);
        findViewById(R.id.Discount_Button3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mBtnPressed != null) {
                    //이전에 눌렸던 버튼이 있다면 다시 원래대로 돌리자.
                    mBtnPressed.setBackgroundResource(android.R.drawable.btn_default);
                }

                mBtnPressed = null;
            }
        });


        findViewById(R.id.Pay).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mBtnPressed == null) {
                    // 선택된 버튼이 없다.
                }else{
                    // 선택된 버튼에 따라 특정 동작을 한다.
                    switch(mBtnPressed.getId()) {
                        case R.id.Discount_Button1:
                            
                            break;
                        case R.id.Discount_Button2:
                            
                            break;
                    }
                }
            }
        });
    }

 

 

바램 (19,650 포인트) 님이 2016년 11월 17일 답변
공산당님이 2016년 11월 19일 채택됨
바램님 답변 감사드립니다. 말씀해주신 그 방법이 가장 적절한것 같은데.. 참 ㅠ 제 코드에 적용시키기가 힘드네요 ㅠ..

제가 작성한 코드의 방법으로는, 각각의 버튼에 i값을 따로 지정을 해 주었고 선택이 되었을때 가시적으로 눈에 띄도록

회색이 배경화면에 나타나도록 주었고 다시 버튼을 누르게 된다면 원래의 버튼의 색으로 돌아오게 만들었습니다.

그리고, 하나의 버튼이 선택이 된다면, 다른 버튼들을 더이상 선택이 되지 못하도록 만들고 싶은데.. 그 방법을 잘 모르겠습니다..

자꾸만, 중복으로 선택을 할 수가 있기에, 난감하네요 ..

제가 원 글을, 다른 사이트에 올려보았는데 한번 봐주시면 정말 감사드리겠습니다.


http://www.androidside.com/bbs/board.php?bo_table=B49&wr_id=164651&page=0&sca=&sfl=&stx=&spt=0&page=0&cwin=#c_164687
...