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 에 한줄만으로 쓰도록 함
}
}