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

[안드로이드] [사진첨부] 사진과 같은 프로그램을 만들고 있는도중 모르는 부분이 있습니다

0 추천

 

안녕하세요.

 

안드로이드 스튜디오로 열심히 공부하고 있는 학생입니다.

 

안드로이드에 대한 활성화된 커뮤니티를 찾다 찾다 안드로이드 사이드를 찾게 되었고

 

공부하다가 모르는 부분이 있어서 글을 올리게 되었습니다.

 

제가 질문하고자 하는것은, 다름이 아니라 바로 아래와 같은 사진을 만드는 것입니다.

 

근데 정상적으로 만들긴 하였으나, 그 과정속에서 다른 분의 도움을 받아서 제가 혼자 스스로

 

100%로 만든것이 아니기에, 모르는 부분이 있어서 글을 올렸습니다.

 

 

질문1.PNG


----------------------- 제 소스 ----------------------


 

package ex.project3;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

    RadioGroup g1;
    RadioButton r1,r2,r3;
    Button b1;
    ImageView img1;
    ToggleButton t1;

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

        g1 = (RadioGroup) findViewById(R.id.radiogroup1);

        r1 = (RadioButton) findViewById(R.id.radioButton);
        r2 = (RadioButton) findViewById(R.id.radioButton2);
        r3 = (RadioButton) findViewById(R.id.radioButton3);

        img1 = (ImageView) findViewById(R.id.imageView);

        t1 = (ToggleButton) findViewById(R.id.toggleButton);

        t1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
               // 이부분을 어떻게 해야할지 모르겠음 ..
                g1.setVisibility(isChecked ? View.VISIBLE : View.GONE);
            }
        });


        b1 = (Button) findViewById(R.id.button);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch(g1.getCheckedRadioButtonId())
                {
                    case R.id.radioButton:
                        img1.setImageResource(R.drawable.apple);
                        break;

                    case R.id.radioButton2:
                        img1.setImageResource(R.drawable.orange);
                        break;

                    case R.id.radioButton3:
                        img1.setImageResource(R.drawable.subak);
                        break;

                    default:
                        Toast.makeText(getApplicationContext(),"과일을 선택하세요",Toast.LENGTH_LONG).show();
                }
            }
        });

    }
}
제가 궁금한 부분은, 위에서 주석을 한 부분에서 삼항 연산자가 이루어지고
왜 갑자가 View가 나오는지 도무지 모르겠습니다.. 최대한 이해 해보려고 해보아도..
 
이해가 잘 안되는데 안드로이드 고수님들께서 도움을 좀 주시면 정말 감사드리겠습니다 ㅠ 
Kind카인드 (3,600 포인트) 님이 2016년 9월 18일 질문
이해가 안가신다는게 삼항연산자는 아닌 것 같고, 어떻게 이벤트 리스너가 호출되고 isChecked에 자동으로 true/false가 넘어오는가를 말씀하시는 건가요?

1개의 답변

0 추천
OnCheckedChangedListener의 onCheckedChange 함수는 그 이름처럼 대상이 되는 CompoundButton의 check status가 변경이 될때 호출이 됩니다. 위의 소스에서는 toggle버튼에 사용하였는데 checkBox도 마찬가지가 되겠습니다. 사용자에 의해서 check status가 변경이 될때 동적으로 어떠한 작업이 필요할 경우 사용을 합니다.

파라미터에 포함된 boolean값 즉, 위에서 말하는 isChecked 파라미터는 사용자에 의해 변경된 현재 status값을 가지고 있습니다. 개발자는 toggle 버튼의 상태에 따라서 radiogroup을 보여줄것인지 안보일 것인지를 결정하도록 의도 한것 같구요.

View의 보여지고 안보여지고를 결정하는 함수가 위에서 사용한 setVisibility함수 입니다. 이 함수는 int값을 파라미터로 받게 되어 있고 이 int값은 View에 VISIBLE, GONE, INVISIBLE 값이 각각 정의가 되어 있습니다. 이 3가지의 차이로는

VISIBLE : 해당 View를 보여줌

INVISIBLE : 해당 View를 가리지만 View가 차지하고 있는 크기 영역은 유지함

GONE : 해당 View를 가리고 View의 영역도 무시해버림

이렇게 됩니다.

결과적으로 위의 코드대로라면 toggle버튼 check status가 활성화 되면(true가 되면) radioGroup을 보여주고 비활성화 되면(false가 되면) radioGroup을 숨기는 동작을 할 것입니다.
Development Guy (70,570 포인트) 님이 2016년 9월 19일 답변
...