유디의 공간정보·개발일기

6. 0715_ 리뷰, RadioGroup 본문

JAVA + Android Studio

6. 0715_ 리뷰, RadioGroup

55yudi 2021. 10. 24. 22:14

- padding

- layout_margin

- textView 글자 가운데로 오게 하기 : gravity - center_horizontal

 

- RadioGroup : 하나를 선택하면 다른 하나가 해제되도록 함

  라디오 그룹에 라디오 버튼 원하는 만큼 추가

- radioButton 에 layout_gravity 설정

 

- 코드에서 생성자 만들 때 line에서 마우스 우클릭 - Generate - constructor - 변수 두 개 선택

- Generate - getter and setter

 

- Hashmap<이름, 값> 변수명 = new ArrayList< >( );

  onCreate 메서드 안에

  animalHash.put("dogs", dogs);

  animalHash.put("cats", cats);

 

 

[Animal class]

package com.example.test8;

public class Animal {

    String name;
    String mobile;



    public Animal(String name, String mobile) {
        this.name = name;
        this.mobile = mobile;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
}

 

[Dog class] - Animal 상속

package com.example.test8;

public class Dog extends Animal {

    public static int count = 0;

    public Dog(String name, String mobile) {
        super(name, mobile);

        count = count + 1;
        //count += 1; (윗문장과 같음)
        //count++; (성능문제로 비추)
    }

}

 

[Cat class] - Animal 상속

package com.example.test8;

public class Cat extends Animal {

    public static int count = 0;

    public Cat(String name, String mobile) {
        super(name, mobile);

        count = count + 1;
    }
}

 

[MainActivity.java]

package com.example.test8;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioGroup;

import com.example.test8.databinding.ActivityMainBinding;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;

    ArrayList<Dog> dogs = new ArrayList<Dog>();
    ArrayList<Cat> cats = new ArrayList<Cat>();

    HashMap<String, ArrayList> animalHash = new HashMap<String, ArrayList>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        animalHash.put("dogs", dogs);
        animalHash.put("cats", cats);

        //강아지추가 버튼을 눌렀을 때
        binding.createDogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String myInput1 = binding.input1.getText().toString();
                String myInput2 = binding.input2.getText().toString();
                Dog dog = new Dog(myInput1, myInput2);
                dogs.add(dog);

                binding.output1.setText("강아지 " + Dog.count + "마리");

                showAnimals();
            }
        });

        //고양이추가 버튼을 눌렀을 때
        binding.createCatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String myInput1 = binding.input1.getText().toString();
                String myInput2 = binding.input2.getText().toString();
                Cat cat = new Cat(myInput1, myInput2);
                cats.add(cat);

                binding.output2.setText("고양이 " + Cat.count + "마리");

                showAnimals();
            }
        });

        //라디오버튼을 각각 누를때마다 아래쪽 값들이 다르게 보이도록 하기
        binding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                showAnimals();
                /* 원래 아래 if문으로 비교해야 하는데 이미 비교하는 코드가 showAnimal에 들어있었음
                if(checkedId == R.id.radioButton) { //'전체' 버튼이 선택된 경우

                } else if(checkedId == R.id.radioButton2) { //'강아지' 버튼이 선택된 경우

                } else if(checkedId == R.id.radioButton3) { //'고양이' 버튼이 선택된 경우

                }
                */
            }
        });

    }

    //각각의 라디오 버튼 값에 대한 if문
    public void showAnimals() {
        binding.layout1.removeAllViews(); //이전에 추가된 값들을 다시 지우고 새정보를 추가함(이전의 정보가 계속 쌓이는 걸 방지)

        if(binding.radioButton.isChecked()) { //'전체' 가 선택되어 있는 경우
            showDogs();
            showCats();
        } else if(binding.radioButton2.isChecked()) { //'강아지' 가 선택되어 있는 경우
            showDogs();
        } else if(binding.radioButton3.isChecked()) { //'고양이' 가 선택되어 있는 경우
            showCats();
        }
    }

    //showDogs 함수
    public void showDogs() {
        ArrayList<Dog> dogsList = animalHash.get("dogs");
        for(int i = 0; i < dogsList.size(); i++) {
            Dog outDog = dogsList.get(i); //그 칸에 해당하는 강아지가 나올 것임

            addButton("강아지 " + outDog.getName() + " " + outDog.getMobile(), Color.YELLOW);
            //Button button = new Button(this); //버튼을 새로 만들고
            //button.setTag("강아지 " + outDog.getName() + " " + outDog.getMobile()); //버튼에 정보를 가져온다
            //binding.layout1.addView(button); //레이아웃에 버튼을 생성하겠다
        }
    }

    //showCats 함수
    public void showCats() {
        ArrayList<Cat> catsList = animalHash.get("cats");
        for(int i = 0; i < catsList.size(); i++) {
            Cat outCat = catsList.get(i);

            addButton("고양이 " + outCat.getName() + " " + outCat.getMobile(), Color.MAGENTA);
        }
    }

    public void addButton(String text, int color) { //String text라는 구멍을 만들어줌
        Button button = new Button(this);
        button.setText(text);
        button.setBackgroundColor(color);
        binding.layout1.addView(button);
        //이 3줄코드가 반복되니까 따로 함수로 빼버리고 showDogs, showCats 에 한줄만으로 쓰도록 함
    }

}